js数组和对象分为值传递和引用俩种方式。
对象的值传递
let arr={a:1,b:2}
let row =Object.assign({}, arr);//row对象之后的操作不会影响到源对象arr
可能有些人对assign不太了解,看一下下面代码就会知道如何使用
Object.assign(target, ...sources);
- target 是目标对象
- sources 是源对象
- 返回值是目标对象
描述
如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。
Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象。该方法使用源对象的[[Get]]和目标对象的[[Set]],所以它会调用相关 getter 和 setter。因此,它分配属性,而不仅仅是复制或定义新的属性。如果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescript
数组的值传递
let arr=[{amount:1,content:'1'},{amount:2,content:'2'}]
let my=[].concat(arr);//my数组之后的操作不会影响到源数组arr