簡體   English   中英

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

  1. actualDeleteCountmin(max(ToInteger( deleteCount ),0), lenactualStart )。

但是,尚不清楚使用單個參數調用.splice是否有效。

ECMAScript 6對於單個參數(有一個沒有參數)有一個特殊情況:

  1. 如果實際參數的數量為0,則
    insertCount為0。
    actualDeleteCount為0。
  2. 否則,如果實際參數的數量為1,則
    insertCount為0。
    actualDeleteCountlen - 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM