哪些JavaScript数组函数是可变的?

61

我正在用JavaScript编写一个派生自Array的类,需要知道哪些函数需要重载以便我能够感知到对数组所做的更改。

我知道Array.push()Array.splice()是会修改原数组的。是否有其它的函数也可以修改原数组?


这个回答解决了你的问题吗?如何记住一个方法是否会改变原始数组? - Eyeslandic
3个回答

89

1
变异器链接目前不正确,现在应该是:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype#Mutator_methods - zamnuts
@zamnuts 谢谢。看起来所有链接都需要更新一下。 - Jonathan Lonowski
1
看起来 MDN 文档中的 mutator 方法列表已被删除。请参考此 SO 答案:https://dev59.com/trLma4cB1Zd3GeqPUw-y#54836218。 - zamnuts

10
我发现了一个叫做 Doesitmutate的网站。
该网站列出了所有函数并指出它们是否会改变数据。

9
你可以在使用变异方法之前,使用.concat()来确保不会改变你的数组,例如:
const dontMutateMe = [4,5,1,2,3];
const sortArray = dontMutateMe.concat().sort(...)

8
使用ES2015,只需这样:const sortArray = [ ...dontMutateMe ].sort(...); - Freewalker
尽管ES6非常好用,但并不总是可用的,幸运的是concat是可用的。很高兴知道在这些情况下concat表现良好。只需记住,为执行基本操作创建全新数组并不总是最佳选择,因为复制是有代价的。 - jasonleonhard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接