在JavaScript中,如何改变函数内部数组的值?我知道在使用某些数组方法时会发生这种情况,但它似乎不能用于正常分配。
var arr = [4]
function changeArray(arr) {
arr = [1,2,3];
}
// arr is still equal to [4]. I want it to equal [1,2,3].
我的理解是这段代码不会改变函数之外的“arr”的值。我怎样才能改变作为参数传递的数组?
答案 0 :(得分:6)
您可以使用.splice
:
arr.splice(0, arr.length, 1, 2, 3);
或者您可以清空数组并.push
值:
arr.length = 0;
arr.push(1, 2, 3);
// or given an array of values
arr.push.apply(arr, newValues);
但是,请确保该函数清楚地更改了数组到位。虽然存在执行此操作的本机函数(如Array#sort
),但我认为这不像简单地返回新数组那样常见。
我的理解是这段代码并没有改变" arr"的价值。功能之外。
正确。为变量或属性从不分配新值会更改另一个变量或属性的值(例外:全局范围和with
语句)。
你基本上试图改变变量的值,而不是改变值本身。
JavaScript是call / pass / assign by value(维基百科也提到了"by sharing"),而不是by reference。