* 数据类型在内存中的存储:
1. 基本数据类型(Number、String、Boolean、Null、undefined、Symbol)存储在栈内存中
2. 引用数据类型对象的地址存储在栈内存中,对象存储在堆中
* 浅拷贝
```
// 1. Object.assign
function copy(obj) {
return Object.assign({}, obj);
}
// 2. ...展开运算符
function copy(obj){
return {...obj};
}
```
* 深拷贝
```
function copy(obj) {
if (obj === null) return null;
if(obj.constructor !== Object) return obj;
if(obj.constructor === Date) return new Date(obj);
if(obj.constructor === RegExp) return new RegExp(obj);
var newObj = new obj.constructor(); //保持继承的原型
for(var key in obj){
if(obj.hasOwnProperty(key)){
var val = obj[key];
newObj[key] = typeof val === 'object' ? arguments.callee(val):val;
}
}
return newObj;
}
```