javascript splice(0)vs splice(0,undefined)

db2dz4w8  于 2023-04-10  发布在  Java
关注(0)|答案(5)|浏览(237)

没有第二个参数的接头按预期运行:

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

但是具有未定义的第二个参数的Splice的行为不同:

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

有人能给我解释一下区别吗?我会期待同样的(第一)结果。
这表明splice在内部使用“arguments.length”或类似的方法来改变其行为,而不是检查参数。

ovfsdjhp

ovfsdjhp1#

这表明splice在内部使用“arguments.length”或类似的语句
是的,这正是内部发生的事情。
如果只传递了一个参数,它将删除所有元素,直到最后。
如果传入了更多的参数,它会接受第二个参数,并将其转换为一个整数,并将其用于要删除的元素的计数。当您传递undefined时,它会转换为数值NaN,这将导致整数0-没有元素被删除。

wko9yo5t

wko9yo5t2#

根据文档,Array.prototype.splice返回删除的元素。
它还表示,当第二个参数deleteCount等于0时,则不删除任何内容。
所以,在第一种情况下,你删除了索引0之后的所有内容,结果是整个数组。
在第二种情况下,删除0个元素,结果是空数组。

t30tvxxf

t30tvxxf3#

第二个结果为空的原因是,如果第二个参数为0或负数不删除任何元素
这当然是根据mozzila

f87krz0w

f87krz0w4#

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

du7egjpx

du7egjpx5#

语法是:

splice(index, delete, insert)

实际上有一个条件“如果删除部分分配的值为(undefined,0,false),它将返回空数组”。
这就是为什么在第二个语法中返回空数组”

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

相关问题