Array.prototype.slice - 如果结束参数大于数组长度怎么办?

19

我找不到它了 - 如果传递给 Array.prototype.sliceend 参数大于数组长度会怎样?

我已经测试过了,在Chrome里它是有效的,但我不确定这是否是标准行为,因此能否普遍使用?

3个回答

31
如果 end 大于数组的长度,它将使用数组的长度。根据规范

如果相对结束位置 relativeEnd 小于 0,让 final 等于 max((len + relativeEnd),0);否则让 final 等于 min(relativeEnd, len)

所以是的,这是可以使用的标准行为。


回答您问题中的这一部分:

我找不到它

我觉得最快的方法是搜索 "mdn array slice" - 第一个结果通常是 Mozilla 开发者网络相关文档页面,例如 这个页面。每个页面都有一个规范部分,其中链接到规范的正确部分。阅读规范需要一些熟悉,但有时深入了解它们是很有用的。


谢谢,我一直都错过了规格说明部分,不知何故,这样已经有一段时间了;/。 - LAdas
2
感谢您分享有关使用规范部分的建议。 - Iv Ov

1

是的,它符合规格。

根据spec

  1. 如果relativeEnd < 0,则final为max((len + relativeEnd),0);否则,final为min(relativeEnd, len)。

这意味着final值是参数提供的结束值relativeEnd和数组长度lenmin值。

  1. 当k < final时重复

因此,如果未指定end,则循环将执行到数组的length


0
数组只复制到min(array.length, endArgument)。是的,这在§22.1.3.22中标准化了,并且可以信任其在每个浏览器中都能正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接