我正在学习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>
我预计价值是:&#34;萨博&#34;因为我没有改变汽车阵列,唯一的变化是新车阵列,但输出是:&#34;奔驰&#34;。
有人可以解释一下发生了什么吗?
由于
答案 0 :(得分:2)
如果要克隆cars
数组,请使用slice
:
var newcars = cars.slice(0);
否则它们将指向内存中的相同数组(通过引用)。
答案 1 :(得分:0)
您使用相同的参考。
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);
答案 2 :(得分:0)
变量&#34;汽车的价值&#34;包含对数组的&#34;引用&#34;不是&#34;数组值&#34;。所以,当你喜欢&#34; var newcars = cars&#34;你实际上只是复制参考,这意味着&#34;汽车&#34;和&#34; newcars&#34;指向同一个数组。你需要制作一个阵列的另一个副本,其中包括&#34; cars&#34;指向然后让&#34; newcars&#34;参考该新副本。你可以用不同的方式克隆一个数组,可以使用像jQuery这样的库(比如here),下划线(比如here)或者没有像这里Copying array by value in JavaScript
这样的库来完成