没有第二个参数的拼接行为符合预期:
['a','b','c'].splice(0) // Returns ['a','b','c']
但是,带有未定义的第二个参数的Splice表现不同:
['a','b','c'].splice(0, undefined) // Returns []
有人可以向我解释一下这个区别吗?我期待相同(第一)的结果。
它建议在内部,splice使用“arguments.length”或类似的方式来改变它的行为,而不是检查参数。
它表明在内部,splice使用“arguments.length”或类似的
是的,那正是what happens internally。
如果只传递了一个参数,则会删除所有元素,直到结束。
如果传递了更多参数,则采用第二个参数,将其转换为整数并将其用于要删除的元素计数。当你传递undefined
时,它被转换为数字值NaN
,这导致整数0
- 没有元素被删除。
根据文档,Array.prototype.splice返回已删除的元素。
它还说,当第二个参数deleteCount
等于0
时,没有任何内容被删除。
因此,在第一种情况下,您将删除索引0之后的所有内容,结果是整数组。
在第二种情况下,您将删除0个元素,结果为空数组。
第二个结果为空的原因是,如果第二个参数为0或负数,则不会删除任何元素。
这当然是根据mozzila。
语法是:
splice(index, delete, insert)
实际上有条件“如果删除部分分配”假“值”(未定义,0,假)它将返回空数组“。
这就是为什么在第二语法中返回空白数组“
['a','b','c'].splice(0) //returns complete array
['a','b','c'].splice(0, undefined) // Returns []