[英]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.