Javascript:为什么数组方法不返回新数组?

Javascript: Why don't array methods return a new array?

提问人:RNdev 提问时间:12/4/2022 更新时间:12/4/2022 访问量:57

问:

我知道字符串上的方法返回新字符串的原因是字符串是不可变的,因此该方法无法修改您传递给它的字符串。

对于数组,如果将其传递给方法,则该方法可以修改数组,因为数组是可变的。我想知道为什么数组方法(以及其他可变类型的方法)不编写为返回新数组,以便它们与字符串等基元类型的方法一致。

例如,可以这样写:arr.map()

function map = (arr) => {
  ...<logic>...
}

可以这样写:

function map = (arr) => {
  let arr_ = arr.slice()
  ...<logic>...
  return arr_
}

可变类型的方法不是以这种方式编写的,这是有原因的吗?

JavaScript的 不变性 可变 基元类型 易变性

评论

3赞 Ouroborus 12/4/2022
这取决于功能。例如,返回一个新数组,同时就地修改该数组。很大程度上是由于对上下文有意义的原因。.map().sort
5赞 mplungjan 12/4/2022
doesitmutate.xyz
2赞 Hans Kesting 12/4/2022
这意味着创建一个潜在的大型数据结构的额外副本

答: 暂无答案