Javascript 更改数组值也会更改另一个指定数组中的值
我正在学习Javascript,并在W3学校的代码编辑器中尝试以下代码: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
<!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中,每件事都是通过值传递的,但是应该注意,对于数组和对象,值就是引用。