在函数内改变JavaScript数组

Mutate JavaScript Array Inside Function

本文关键字:JavaScript 数组 改变 函数      更新时间:2023-09-26

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

您可以使用.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是通过调用/传递/分配(维基百科也提到"通过共享"),而不是通过引用