Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改变量值后未更新数组值_Javascript - Fatal编程技术网

Javascript 更改变量值后未更新数组值

Javascript 更改变量值后未更新数组值,javascript,Javascript,在javascript中,为什么列表不使用变量更新 var x = 5; var l = [x]; x += 6; 为什么l仍然是5而不是11?有没有办法让它用变量更新?与对象不同,原语值是不可变的。一旦您更改了它们,就必须重新分配它们 var x = 5; var l = [x]; x += 6; var l = [x]; x += 6; var l = [x]; // new value updation. 由于您不保留对数组的引用,因此将使用新数组重新分配 如果持有对数组的引用,则只

在javascript中,为什么列表不使用变量更新

var x = 5;
var l = [x];
x += 6;

为什么
l
仍然是5而不是11?有没有办法让它用变量更新?

与对象不同,原语值是不可变的。一旦您更改了它们,就必须重新分配它们

var x = 5;
var l = [x];
x += 6;
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.

变量不会自我更新。你必须重新定义它

var x=5;
var l=[x];
x+=6;//x已更改,但l未更改,因为您将其定义为旧x
l=[x]//将其重新定义为新的x

控制台日志(l)
l
是一个值列表,而不是指针列表。为了模拟您正在尝试的操作,您可以存储可变对象并对其进行变异

var x = { val: 5 };
var l = [x];
x.val += 6;
console.log(l); // [{ val: 11 }]

有了这个变量,l将是最新的

我的理解是,这实际上非常简单:

Javascript总是按值传递,但当变量引用对象(包括数组)时,“值”是对对象的引用

更改变量的值不会更改基础基元或对象,它只是将变量指向新的基元或对象

但是,更改变量引用的对象的属性确实会更改基础对象


更新数组值的唯一方法是重新分配它。

var l=[x+=6]
也是一种简单的方法。