我有一个数组说为什么splice()方法改变其他数组的值?
var list = ["first", "second"];
现在我给你列表其他一些变量说
var temp = list;
现在,当我使用拼接名单像
list.splice(0,1);
现在,当我检查它显示的清单的值
list = ["second"]
而且当我检查温度的值,那么它说
temp = ["second"]
我想知道为什么会这样呢?为什么temp的值改变了?
我有一个数组说为什么splice()方法改变其他数组的值?
var list = ["first", "second"];
现在我给你列表其他一些变量说
var temp = list;
现在,当我使用拼接名单像
list.splice(0,1);
现在,当我检查它显示的清单的值
list = ["second"]
而且当我检查温度的值,那么它说
temp = ["second"]
我想知道为什么会这样呢?为什么temp的值改变了?
在JS
这一个常见的错误是一个指针,不是对象的克隆:
var temp = list;
如果你想要实际上对象,有几种方法。最简单的方法就是连接它自己:
var temp = list.concat([]);
// or
var temp = list.slice();
请注意,这有点危险,它只会从数组中获取基本值。还有更多先进的克隆对象和创建'完美'数组克隆的方法。
您可以使用原型的方法来添加此功能。
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
};
,然后让你做到这一点:
var a = [1,2,3];
var b = a.clone();
a[1] = 5;
console.log(a); //1,5,3
console.log(b); //1,2,3
免责声明:从这里开始耍赖借用(整篇文章值得一读):http://my.opera.com/GreyWyvern/blog/show.dml/1725165
因为'temp'只是一个* *指向实际数组的指针,它不被复制。 – 2012-04-17 08:38:42
[为什么在JavaScript中更改数组会影响数组的副本?](http://stackoverflow.com/questions/6612385/why-does-changing-an-array-in-javascript-affect-copies-of-the-array) – 2012-04-17 08:39:46