concat方法拷贝原数组
对象引用(非对象直接量):concat方法会复制对象引用放到组合的新数组里,原数组和新数组中的对象引用都指向同一个实际的对象,所以,当实际的对象被修改时,两个数组也同时被修改.
第一个栗子
var arr1 = [1, 2, {a: 'test'}]
var arr2 = ['a', 'b', 'c']
var output = arr1.concat(arr2)
console.log(output) // output[2].a == 'test'
setTimeout(function(){
arr1[2].a = 'has changed'
console.warn(output) //output[2].a == 'has changed'
}, 5000)
第二个栗子
var arr1 = [1, 2, 3]
var arr2 = ['a', 'b', 'c']
var output = arr1.concat(arr2)
console.log(output)
setTimeout(function(){
arr1[2] = 99
console.warn(output) //output值并不会改变
}, 5000)
面试时被问到过的一道题,记忆犹新啊(为什么我没早看到这篇文章)。变量、对象傻傻搞不清楚。
网友评论