簡體   English   中英

Array.prototype.splice的異常行為

[英]Unexpected behavior of Array.prototype.splice

在為我正在從事的項目實現內部EventEmitter時,在for... in循環中使用Array.prototype.splice時遇到了一個奇怪的問題。 該函數無法從循環內的數組中成功刪除索引:

 var array = [1, 2, 3, 4, 5], index; for (index in array) { if (index === 2) { array.splice(index, 1); } console.log(array[index]); } console.log(array); 

在Google Chrome版本43上運行,此輸出

1
2
3
4
5
[1, 2, 3, 4, 5]

當我期待類似

1
2
4
5
undefined†
[1, 2, 4, 5]

這是設計使然還是錯誤? 我找不到任何記錄的對此行為的引用。

可能的情況下,如果未在for... in每次迭代過程中計算長度

好問題。 :)

在Javascript中,數組是對象,這意味着數組索引是對象鍵。 在Javascript中,對象鍵是字符串。

因此,您的條件index === 2始終為false,因為數字2與字符串'2'不同。

一種解決方案是繼續使用身份運算符(大多數建議),並將index與字符串值“ 2”進行比較

index === '2' 

或者,您也可以使用等於運算符,該運算符將對比較進行類型轉換(盡管這有時可能會給您帶來麻煩)...

index == 2 

但在您的情況下效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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