Javascript中的"shift"和"splice" - 这两个语句相等吗?

25

我想确认以下两个Javascript语句是否产生相同的结果,因为在我看来它们是相同的:

第一个语句:

var element = my_array.splice(0,1)[0];

第二点:

var element = my_array.shift();

我想在自己的代码中将第一个替换为第二个,以提高可读性。 我可以这样做吗?


http://www.webartzforum.com/t3019-javascript-shift-slice-splice - Raab
4个回答

57
他们将产生相同的效果。 splice(0, 1) 将从 my_array 中删除第一个元素,并返回一个包含该元素的新数组。 shift 也会做同样的事情,但它会返回元素本身,而不是一个数组。
在我的看法中,shift 更易读,并且在 Chrome 中也显著更快

enter image description here


1
我已经给每个人的答案点赞了 - 但是选择了你的,因为有额外的性能图表和信息。谢谢大家! - J. Bruni

6

这两行代码都会从数组中删除第一个元素,并返回被删除的元素,它们在所有主流浏览器中都受支持。

你应该使用第二个选项,这样代码会更易读。


2

shift方法返回已移除的元素,splice方法返回一个包含已移除元素的数组。

话虽如此,这两个语句实现的功能相同,我同意第二个更易读。


-1

splice 会返回一个数组,但不会从对象中删除数据,而是创建一个副本。


shift 只从前面返回一个数据并从对象中删除它


例如,
const object = {1}
object.slice(); // return [{1}]
//object will be : {1}
object.shift(); // return {1}
//object will be : {} as shift remove the front data 

2
首先,代码示例本身是错误的。其次,我认为您混淆了splice和slice。Splice确实会改变数组,即它将修改原始数组,shift也同样如此。而另一方面,slice不会改变数组并返回一个新的数组。 - Sushil

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