数组拓展
2020-09-07 本文已影响0人
变量只提升声明不提升赋值
var a1 = [1,2,3,4,5]
var a2 = a1
a2.length = 3
console.log('a1:' + a1, '-----a2:' + a2)
上述代码中将a1这个数组赋值给了a2
然后改变了a2数组的长度
image.png
可以看到,a1的数组长度也改变了
这是因为,我们在赋值的时候其实并没有复制出一个新的数组出来,而是复制了一个指向这个数组的指针 也就是说现在又a1 a2两个指针指向这个数组 当我们去修改a2数组的时候,其实修改的还是原数组 所以a1的长度也会被改变
es5提供的语法 arr.concat(); 来克隆数组
var a1 = [1,2,3,4,5]
const a2 = a1.concat();
a2.length = 3
console.log('a1:' + a1, '-----a2:' + a2)
image.png
可以看到,现在去修改a2的数组已经不会影响到a1这个数组了
es6也提供了扩展符来执行这一操作
const a1 = [1, 2];
// 写法一
const a2 = [...a1];
// 写法二
const [...a2] = a1;
这样写的话也会创造出一个新的数组