【问题标题】:splice(0) vs splice(0,undefined)拼接(0)与拼接(0,未定义)
【发布时间】:2018-01-24 11:19:26
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: javascript arrays splice


    【解决方案1】:

    这表明在内部,splice 正在使用“arguments.length”或类似内容

    是的,就是what happens internally

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

    【讨论】:

    • 完美。谢谢。
    【解决方案2】:

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

    它还说,当第二个参数deleteCount 等于0 时,什么都不会被删除。

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

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

    【讨论】:

      【解决方案3】:

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

      这当然是根据mozzila.

      【讨论】:

      • 我猜关键词是“如果省略”。
      • 不,undefined 不是“否定/错误”。
      • @Bergi 我更正了我刚才读到的答案,我错了,感谢您为我清除它。
      【解决方案4】:

      语法是:

      splice(index, delete, insert)
      

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-12-24
        • 1970-01-01
        • 2016-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多