拼接(0)与拼接(0,未定义)
splice(0) vs splice(0,undefined)
没有第二个参数的拼接行为符合预期:
['a','b','c'].splice(0) // Returns ['a','b','c']
但是带有未定义的第二个参数的 Splice 表现不同:
['a','b','c'].splice(0, undefined) // Returns []
谁能给我解释一下区别?我希望得到相同的(第一个)结果。
这表明 splice 在内部使用 "arguments.length" 或类似的方法来改变其行为,而不是检查参数。
根据文档,Array.prototype.splice returns 删除了元素。
它还说,当第二个参数deleteCount
等于0
时,什么都不会被删除。
因此,在第一种情况下,您要删除索引 0 之后的所有内容,结果是整个数组。
在第二种情况下,您要删除 0 个元素,结果是空数组。
第二个结果为空的原因是,如果第二个参数为 0 或负数,没有元素被删除。
这当然是根据mozzila。
It suggests that internally, splice is using "arguments.length" or similar
是的,正是 what happens internally。
如果只传递了一个参数,它将删除所有元素,直到结束。
如果传递了更多参数,它会采用第二个参数,将其转换为整数并将其用于要删除的元素的计数。当您传递 undefined
时,它被转换为数值 NaN
,这导致整数 0
- 没有元素被删除。
语法是:
splice(index, delete, insert)
条件实际上 "if delete part assigning "false" 值为 (undefined, 0, false) 它将 return 空数组"。
这就是为什么在第二种语法中 returning 空白数组
['a','b','c'].splice(0) //returns complete array
['a','b','c'].splice(0, undefined) // Returns []
没有第二个参数的拼接行为符合预期:
['a','b','c'].splice(0) // Returns ['a','b','c']
但是带有未定义的第二个参数的 Splice 表现不同:
['a','b','c'].splice(0, undefined) // Returns []
谁能给我解释一下区别?我希望得到相同的(第一个)结果。
这表明 splice 在内部使用 "arguments.length" 或类似的方法来改变其行为,而不是检查参数。
根据文档,Array.prototype.splice returns 删除了元素。
它还说,当第二个参数deleteCount
等于0
时,什么都不会被删除。
因此,在第一种情况下,您要删除索引 0 之后的所有内容,结果是整个数组。
在第二种情况下,您要删除 0 个元素,结果是空数组。
第二个结果为空的原因是,如果第二个参数为 0 或负数,没有元素被删除。
这当然是根据mozzila。
It suggests that internally, splice is using "arguments.length" or similar
是的,正是 what happens internally。
如果只传递了一个参数,它将删除所有元素,直到结束。
如果传递了更多参数,它会采用第二个参数,将其转换为整数并将其用于要删除的元素的计数。当您传递 undefined
时,它被转换为数值 NaN
,这导致整数 0
- 没有元素被删除。
语法是:
splice(index, delete, insert)
条件实际上 "if delete part assigning "false" 值为 (undefined, 0, false) 它将 return 空数组"。
这就是为什么在第二种语法中 returning 空白数组
['a','b','c'].splice(0) //returns complete array
['a','b','c'].splice(0, undefined) // Returns []