没有第二个参数的接头按预期运行:
['a','b','c'].splice(0) // Returns ['a','b','c']
但是具有未定义的第二个参数的Splice的行为不同:
['a','b','c'].splice(0, undefined) // Returns []
有人能给我解释一下区别吗?我会期待同样的(第一)结果。
这表明splice在内部使用“arguments.length”或类似的方法来改变其行为,而不是检查参数。
没有第二个参数的接头按预期运行:
['a','b','c'].splice(0) // Returns ['a','b','c']
但是具有未定义的第二个参数的Splice的行为不同:
['a','b','c'].splice(0, undefined) // Returns []
有人能给我解释一下区别吗?我会期待同样的(第一)结果。
这表明splice在内部使用“arguments.length”或类似的方法来改变其行为,而不是检查参数。
5条答案
按热度按时间ovfsdjhp1#
这表明splice在内部使用“arguments.length”或类似的语句
是的,这正是内部发生的事情。
如果只传递了一个参数,它将删除所有元素,直到最后。
如果传入了更多的参数,它会接受第二个参数,并将其转换为一个整数,并将其用于要删除的元素的计数。当您传递
undefined
时,它会转换为数值NaN
,这将导致整数0
-没有元素被删除。wko9yo5t2#
根据文档,Array.prototype.splice返回删除的元素。
它还表示,当第二个参数
deleteCount
等于0
时,则不删除任何内容。所以,在第一种情况下,你删除了索引0之后的所有内容,结果是整个数组。
在第二种情况下,删除0个元素,结果是空数组。
t30tvxxf3#
第二个结果为空的原因是,如果第二个参数为0或负数,不删除任何元素。
这当然是根据mozzila。
f87krz0w4#
根据文档,Array.prototype.splice返回删除的元素。
du7egjpx5#
语法是:
实际上有一个条件“如果删除部分分配的值为(undefined,0,false),它将返回空数组”。
这就是为什么在第二个语法中返回空数组”