yang7021/blog

复杂的数据类型js提供的方法不能深拷贝

Opened this issue · 1 comments

var arr = [{a:1}, {a: 3}, {a:4}];
var a = arr.slice();
console.log(a === arr, a[0] === arr[0]);  // false,true

为什么会出现上面那种情况呢!
slice返回的是一个新数组,因为在js中Array是Object,导致引用地址不同,所以为false。
数组里存在对象,本人理解为数组中存放的对象为引用地址。slice赋值是浅拷贝,导致数组内的对象赋值也是引用地址。两个数组内的对象指向同一引用地址,所以为true。
概念:对象的深拷贝

感谢前端狂想录的大佬解谜: Symbol