为什么 JavaScript 中的某些方法会复制所调用的对象?

Why some methods in JavaScript make a copy of the object invoked?

在 JavaScript 中,一些方法会复制调用它的对象,而另一些则不会。

例如:

var numbers = [1, 2, 3, 4, 5];
numbers.map(function(x) { return x + 1 });
console.log(numbers); // [1, 2, 3, 4, 5]; 

它会复制 "numbers",您必须将其设置为另一个变量。

鉴于:

var numbers = [1, 2, 3, 4, 5];
numbers.reverse();
console.log(numbers); // [5, 4, 3, 2, 1];

它直接改变了"numbers"。谁能解释一下为什么?

javascript中的数组方法大致分为三类 - 增变方法 - 访问器方法 - 迭代方法

Mu​​tator 方法 - 例如:reverse()、push() 等:修改数组。顾名思义,这些方法会改变调用它们的数组。

访问方法 - 例如:include()、concat() 等: - 不要修改数组和 return array.i 的某些表示.e 一个新数组是 returned,它是修改后的数组。

迭代方法 -Ex : filter(), map()- 将处理数组时回调的函数作为参数。在这些方法中,数组的长度已经是 sampled/copied 并且回调是在这个数组上执行的。

泛型方法(非标准) - EX: join() 这些方法本质上是泛型的,适用于“看起来像”数组的对象。

详细解释见下文link: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype

希望对您有所帮助!!!

这是由于将方法纳入 JavaScript 的时间不同所致。

ECMAScript.

的第一个版本中有反向方法

该地图是最近在第 5 版中添加的。

如今,语言的功能性越来越强。函数式语言的主要原则之一是数据的不变性。因此,数组的这些新方法(即 map、filter 等)是有效的,不会更改源数组。