gpt4 book ai didi

javascript - Chrome 中的 Array.prototype.splice - 不符合规范?

转载 作者:行者123 更新时间:2023-11-29 18:10:06 25 4
gpt4 key购买 nike

我刚刚在复制数组时发现我的代码中有一个错误。我做了 array.splice(0),而不是使用 slice。但奇怪的是它仍然有效。此用法不符合 Array.prototype.splice spec on MDN其中声明 deleteCount(第二个参数)是必需的,它返回

“包含被删除元素的数组。如果只删除一个元素,则返回一个只有一个元素的数组。如果没有删除任何元素,则返回一个空数组。”

我在 Chrome 中运行了一些测试,这就是我得到的结果

var array = [0, 1, 2, 3];
var spliced = array.splice(0); // [0, 1, 2, 3]

但是当我这样做的时候

var array = [0, 1, 2, 3];
var spliced = array.splice(0, 0); // [] as per the spec

这是一个有趣的 Chrome 功能还是规范已经过时了?

最佳答案

根据 ECMAScript 5 ,有人可能会争辩 arr.splice(0)arr.splice(0, 0)应该返回相同的结果,因为在第 7 步中,ToInteger(undefined)0 .

  1. Let actualDeleteCount be min(max(ToInteger(<em>deleteCount</em>),0), <em>len</em> – <em>actualStart</em>).

但是,尚不清楚调用 .splice 是否有效用一个参数。

ECMAScript 6有一个针对单个参数的特例(和一个没有参数的特例):

  1. If the number of actual arguments is 0, then
    Let insertCount be 0.
    Let actualDeleteCount be 0.
  2. Else if the number of actual arguments is 1, then
    Let insertCount be 0.
    Let actualDeleteCount be len - actualStart

len是数组的长度,actualStart源自第一个参数。所以arr.splice(0)变得等同于 arr.splice(0, arr. length) ,这意味着 Chrome 似乎符合新规范(有意或无意)。

另一方面,arr.splice()相当于arr.splice(0, 0) Chrome 会按预期返回一个空数组。

关于javascript - Chrome 中的 Array.prototype.splice - 不符合规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com