Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays - Fatal编程技术网

Javascript 更改数组值也会更改另一个指定数组中的值

Javascript 更改数组值也会更改另一个指定数组中的值,javascript,arrays,Javascript,Arrays,我正在学习Javascript,并在W3学校的代码编辑器中尝试以下代码: <!DOCTYPE html> <html> <body> <p id="demo"></p> <script> var cars = ["Saab", "Volvo", "BMW"]; var newcars = []; newcars = cars; newcars[0] = "Benz" document.getElementById

我正在学习Javascript,并在W3学校的代码编辑器中尝试以下代码:

    <!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var cars = ["Saab", "Volvo", "BMW"];
var newcars = [];
newcars = cars;
newcars[0] = "Benz"
document.getElementById("demo").innerHTML = cars[0];
</script>

</body>
</html>

var汽车=[“萨博”、“沃尔沃”、“宝马”]; var newcars=[]; 新车=汽车; 新车[0]=“奔驰” document.getElementById(“demo”).innerHTML=cars[0];
我希望值是:“萨博”,因为我没有对cars数组进行任何更改,唯一的更改是newcars数组,但输出是:“奔驰”

有人能解释一下发生了什么事吗


谢谢

您正在使用相同的参考资料

var cars = ["Saab", "Volvo", "BMW"];
var newcars = []; // new array! good!
newcars = cars; // points to cars. all changes will reflect both.
newcars[0] = "Benz"
document.getElementById("demo").innerHTML = cars[0];
您可能希望复制数组而不是引用。如果您使用Jquery比这更好:

// Shallow copy
var newObject = jQuery.extend([], oldObject);

// Deep copy
var newObject = jQuery.extend(true, [], oldObject);

如果要克隆
cars
阵列,请使用
slice

var newcars = cars.slice(0);

否则,它们将指向内存中的同一数组(通过引用)。

变量“cars”的值包含“对数组的引用”,而不是“数组值”。所以,当你像“var newcars=cars”那样时,你实际上只是在复制引用,这意味着“cars”和“newcars”指向同一个数组。您需要创建“cars”指向的数组的另一个副本,然后让“newcars”引用该新副本。您可以用不同的方式克隆数组,可以使用jQuery(like)、下划线(like)或不带like的库来克隆数组,如果数组不是
jQuery.extend([],oldObject)?是的,行为类似,在JavaScript中,每件事都是通过值传递的,但是应该注意,对于数组和对象,值就是引用。