在javascript中,为什么列表不能用变量更新?
var x = 5;
var l = [x];
x += 6;
为什么l
仍然是5而不是11?有没有办法让它用变量更新?
答案 0 :(得分:3)
l
是值列表,而不是指针列表。为了模拟你想要做的事情,你可以存储可变对象并改变它们。
var x = { val: 5 };
var l = [x];
x.val += 6;
console.log(l); // [{ val: 11 }]
答案 1 :(得分:2)
与对象不同,原始值是不可变的。一旦你改变它们,你必须将它们分配回来。
var l = [x];
x += 6;
var l = [x]; // new value updation.
由于您没有保留对数组的引用,因此返回了新数组。
如果你持有对数组的引用,你可以只更新变量而不是整个数组。
var arr = [x];
var l = arr;
x += 6;
arr[0] = x; // new value updation at position 0.
答案 2 :(得分:2)
我的理解是,这实际上非常简单:
Javascript总是按值传递,但是当变量引用对象(包括数组)时,“value”是对象的引用。
更改变量的值永远不会更改基础图元或对象,它只是将变量指向新的图元或对象。
但是,更改变量引用的对象的属性确实会更改基础对象。
更新数组值的唯一方法是重新分配它。
答案 3 :(得分:0)
变量不会自行更新。你必须重新定义它。
var x = 5;
var l = [x];
x += 6; // x has changed but l has not, because you defined it to be old x
l = [x] // redefine it to be new x
console.log(l);

答案 4 :(得分:0)
var x = 5;
x +=6;
var l = [x];
使用此变量将是最新的