在函数内部变换JavaScript数组

时间:2014-08-20 15:23:13

标签: javascript arrays

在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”的值。我怎样才能改变作为参数传递的数组?

1 个答案:

答案 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