splice(0)vs splice(0,undefined)

时间:2018-01-24 11:19:27

标签: javascript arrays splice

没有第二个参数的拼接行为符合预期:

['a','b','c'].splice(0)            // Returns ['a','b','c']

但是,带有未定义的第二个参数的Splice表现不同:

['a','b','c'].splice(0, undefined) // Returns []

有人可以向我解释一下这个区别吗?我希望得到相同的(第一)结果。

它表明在内部,splice使用“arguments.length”或类似的方式来改变它的行为,而不是检查参数。

4 个答案:

答案 0 :(得分:4)

  

它表明在内部,splice使用“arguments.length”或类似的

是的,这正是what happens internally

如果只传递了一个参数,则会删除所有元素,直到结束 如果传递了更多参数,则采用第二个参数,将其转换为整数并将其用于要删除的元素计数。当您传递undefined时,会将其转换为数字值NaN,这会导致整数0 - 不会删除任何元素。

答案 1 :(得分:1)

根据文档,Array.prototype.splice会返回已删除的元素。

它还说当第二个参数interface iObject { [key: string]: { ... }[] | string; } 等于deleteCount时,不会删除任何内容。

因此,在第一种情况下,您将删除索引0之后的所有内容,结果是整个数组。

在第二种情况下,您要删除0个元素,结果为空数组。

答案 2 :(得分:0)

第二个结果为空的原因是,如果第二个参数为0或负数没有删除任何元素

这当然是根据mozzila

答案 3 :(得分:-1)

语法是:

splice(index, delete, insert)

实际上有条件“如果删除部分分配”假“值(未定义,0,假)它将返回空数组”。

这就是为什么在第二种语法中返回空白数组“

['a','b','c'].splice(0) //returns complete array
['a','b','c'].splice(0, undefined) // Returns []