Chrome 中的 Array.prototype.splice - 不符合规范
Array.prototype.splice in Chrome - not conforming to spec?
我刚刚在复制数组时发现代码中有一个错误。我做了array.splice(0)
,而不是使用slice
。但奇怪的是,它仍然有效。这种用法不符合 MDN 上的 Array.prototype.splice 规范,该规范声明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
。
- 让实际删除计数
min(max(ToInteger(deleteCount),0), len – actualStart
)。
但是,目前尚不清楚使用单个参数调用.splice
是否有效。
ECMAScript 6 有一个单参数的特殊情况(还有一个没有参数):
- 如果实际参数的数量为 0,则
让插入计数为 0。
让实际删除计数为 0。- 否则,如果实际参数的数量为 1,则
让插入计数为 0。
让 actualDeleteCount be len - actualStart
len
是数组的长度,actualStart
是从第一个参数派生的。所以arr.splice(0)
变得等同于arr.splice(0, arr. length)
,这意味着Chrome似乎符合新规范(有意或无意)。
另一方面,arr.splice()
等效于arr.splice(0, 0)
,Chrome 会按预期返回一个空数组。
相关文章:
- “;Stub对象”;对象不符合检查点's条件
- 使用 jQuery 检查文本可见性 .包含代码的行为不符合预期
- Javascript setSelectionRange 在单元测试中的行为不符合预期
- DOM元素的行为不符合预期
- Javascript动画的行为不符合预期
- 谷歌图表与表给予“;[对象对象]不符合控制规范”;错误
- Chrome 中的 Array.prototype.splice - 不符合规范
- 获取集合中不符合条件的所有文档
- 标头不符合 100% 宽度
- 粘性导航栏在 jsfiddle 上工作,但在本地主机上不符合预期
- 页面视图不符合预期,HTML 未显示,页面为空白
- Javascript clearInterval 和 setInterval() 的行为不符合预期
- jQuery Clone() 在页面中的行为不符合 asp.net
- JavaScript 如果文本输入不符合参数,则阻止文本输入
- event.stopPropagation();行为不符合预期
- 为什么正则表达式模式不符合 javascript 数据类型的条件
- 表格下拉选择不符合Div
- 从没有'不符合Regex规则
- $(window).滚动在if语句内部执行,即使它没有't不符合条件
- 使用不符合noconflict的外部JavaScript文件