我有一个数组说
var list = ["first", "second"];
现在我将列表分配给其他一些变量说
var temp = list;
现在当我在列表上使用拼接时
list.splice(0,1);
现在,当我检查列表的值时,它显示
list = ["second"]
另外,当我检查 temp 的值时,它会说
temp = ["second"]
我想知道为什么会这样?为什么temp的值会改变?
我有一个数组说
var list = ["first", "second"];
现在我将列表分配给其他一些变量说
var temp = list;
现在当我在列表上使用拼接时
list.splice(0,1);
现在,当我检查列表的值时,它显示
list = ["second"]
另外,当我检查 temp 的值时,它会说
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