10 09/2014

javascipt clone array

最后更新: Wed Sep 10 2014 12:37:50 GMT+0800
a=[1,2,3,4,5,6]
b=a
b.shift()
console.log(a,b)
a===b //true

这时,a 和 b 都变成 [2,3,4,5,6] 了。

用 slice 方法

a=[1,2,3,4,5,6]
b=a.slice()
b.shift()
console.log(a,b)

slice 不可靠!

a=[[1],[2],[3],[4]]
b=a.slice()
b.shift().shift()
console.log(a,b)

原因: b[0][0] 包含了一个指向 a[0][0] 的指针! 似乎所有语言都有这个问题,节约内存使用。jQuery’s extend 可以用来完成一个 “深度” 拷贝。

a=[[1],[2],[3],[4]]
b = $.extend(true, [], a);
b.shift().shift()
console.log(a,b)