【发布时间】:2016-06-19 00:20:48
【问题描述】:
据我了解,Javascript 通过引用传递对象,而数组也是一个对象,但是当我创建一个整数数组然后将其传递给函数时,如下代码:
function testFunc(outTestArray) {
var aiTemp = [1,2,3,4];
/*Using slice(0) to clone array */
outTestArray = aiTemp.slice(0);
}
var aiTest = Array.apply(null, Array(4)).map(Number.prototype.valueOf, 0);
testFunc(aiTest);
console.log(aiTest.toString()); // aiTest still [0,0,0,0]
我也知道 slice(0) 函数只返回一个数组的浅拷贝,但如果数组只是一个整数数组。所以我的问题是为什么不修改aiTest的数据?
【问题讨论】:
-
重复。简短回答:Javascript 总是按值传递,数组/对象除外。
-
JavaScript 总是按值(复制)。但是,对于对象,值是一个引用(按值引用)。 Is JavaScript a pass-by-reference or pass-by-value language? 你所期望的是一个指针,其中
outTestArray引用了aiTest,这是 JavaScript 所没有的。 -
我认为问题出在 slice(0) 函数上。因为如果在函数 testFunc() 我修改如下: outTestArray[0] = 1; outTestArray[1] = 2;...然后将aiTest传递给这个函数,aiTest就会改变。
-
@TrungNguyen 问题是
=。通过分配outTestArray,您可以修改它的值。但是,aiTest仍然指的是原始数组。outTestArray[1] = 2行为不同的原因是因为它修改了数组本身而不是修改任何一个变量。
标签: javascript arrays javascript-objects