a 1 = [{a:1},{b:1} ]或者 [1,2,3]
Typeof(数组a1),// “Object”
A1 instanceof Arrray //true
所谓的浅拷贝和深拷贝:
浅拷贝是在在拷贝过程中,遍历时那部分为对象/数组类型指向原来的地址,
而深拷贝,则是完全开辟新的内存地址。
浅拷贝:对拷贝对象的引用,不是本身
① For (var I in obj) 最后用var CloneObj= simpClone(拷贝对象obj)
② Object.assign( {目标}, 源obj)
③扩展运算符。
可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造对象时, 将对象表达式按key-value的方式展开。
构造对象时,进行克隆或者属性拷贝(ECMAScript 2018规范新增特性):
对象
let objClone = { ...obj };
var mergedObj = { ...obj1, ...obj2 };
数组
var arr = [1, 2, 3];
var arr2 = [...arr]; // 等同于 arr.slice()
深拷贝:把拷贝对象所引用的全部对象也复制了
加粗样式① JSON.parse(JSON.stringify( ))
只能处理Number、String、Bloon、Array
简单易用,但是会抛弃对象原有的constructor,即不管原来构造函数是啥,拷贝后是Object
② 递归拷贝
最后通过 var targeObj=deepClone(source需要拷贝的源对象,{})
③ 引用做深拷贝的库
jquery
let targetObj = $.extent(true,{},sourceObj)
** lodash库 es6写法**
import lodash from ‘lodash’
let targetOj = lodash.cloneDeep(sourceObj)