[英]JavaScript .push() inside function is overriding global variable
我有.push()
方法的以下问题:
var myArray = ["a", "b", "c", "d"];
function add(arr) {
arr.push("e");
return arr;
}
add(myArray);
// myArray is now ["a", "b", "c", "d", "e"]
为什么它会覆盖myArray
? 无法理解......
Javascript(和大多数其他语言)中的数组通过引用传递。
当您编写add(myArray)
,您将传递对全局myArray
变量引用的同一Array实例的引用。
通过两个引用都可以看到对数组对象的任何更改。
要复制实际的数组实例,请编写add(myArray.slice());
。
请注意,这不会复制其中的对象。
如果你需要能够嵌套数组,那么我将改变.add()
函数让.concat()
将Array复制到变量中,将.push()
新值复制到新数组中,然后返回它。
function add(arr) {
var newArr = arr.concat(); // duplicate
newArr.push("e"); // push new value
return newArr; // return new (modified) Array
}
您也可以使用concat()
,并返回它创建的新数组。
var myArray = ["a", "b", "c", "d"];
function add(arr) {
return arr.concat("e");
}
var newArray = add(myArray);
console.log( newArray ); // ["a", "b", "c", "d", "e"]
console.log( myArray ); // ["a", "b", "c", "d"]
因此,用一个.concat()
完成它,而不是两个方法.slice()
然后.push()
.concat()
。
这也为您提供了传递另一个Array而不是字符串的好处,因此:
return arr.concat(["e","f"]);
会给你:
// ["a", "b", "c", "d", "e", "f"]
代替:
// ["a", "b", "c", "d", ["e", "f"] ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.