今天看代码时看到了 slice(0)
的写法,简单研究了一下。
JS 中对象(数组也是对象)是索引传递的,赋值时会被共享,而不是复制副本。所以只要一个对象被修改,被赋值的变量也会被改变。
1 | var arr1 = ['George','John','Thomas','James','Adrew','Martin']; |
打印结果为:1
'George','John','Thomas','James','Adrew','Martin','Jane'
因为 arr1 和 arr2 共享一个数据,当我们使用其中一个变量(arr1)修改对象数据时,另一个(arr2)也会跟着修改,slice(0) 则可以避免这个问题。
1 | var arr1 = ['George','John','Thomas','James','Adrew','Martin']; |
打印结果为:
1 | 'George','John','Thomas','James','Adrew','Martin','Jane' |
由此可见,添加 ‘Jane’ 的行为只影响了被操作的数组,但并不会影响“复制”出来的新数组。slice(0) 实现了深复制(deep copy),得到一个完全独立的数组。