[英]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
。
- 令actualDeleteCount為
min(max(ToInteger( deleteCount ),0), len – actualStart
)。
但是,尚不清楚使用單個參數調用.splice
是否有效。
ECMAScript 6對於單個參數(有一個沒有參數)有一個特殊情況:
- 如果實際參數的數量為0,則
令insertCount為0。
設actualDeleteCount為0。- 否則,如果實際參數的數量為1,則
令insertCount為0。
讓actualDeleteCount為len - actualStart
len
是數組的長度,而actualStart
是從第一個參數派生的。 因此, arr.splice(0)
等同於arr.splice(0, arr. length)
,這意味着Chrome似乎(有意或無意)符合了新規范。
另一方面, arr.splice()
等同於arr.splice(0, 0)
,Chrome根據預期返回一個空數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.