ArrayIteratorがインデックスを数値型で返すようになった
変更点
タイトルの通り
概要
先日規格の仕様変更があり、V8もそれに追従した。
これ自体は小さな変更だけど、ArrayIteratorがfor-inループと同じ感じだと思っていると詰まるかも。
以下、Array.prototype.keysでの例を挙げてみる。
var i var A = [ 'a', 'b', 'c' ] // 変更前 for (i of A.keys()) console.log(i) // "0" "1" "2" typeof i // "string" // 変更後 for (i of A.keys()) console.log(i) // 0 1 2 typeof i // "number" // for-in for (i in A) console.log(i) // "0" "1" "2" typeof i // "string"
ただのfor-inループでのキー列挙との更なる違い
var i var A = [ 'a', 'b', 'c' ] Array.prototype.x = 'xxx' // for-in for (i in A) console.log(i) // "0" "1" "2" "x" // for-of + Array.prototype.keys for (i of A.keys()) console.log(i) // 0 1 2
for-inはプロトタイプを辿ってキーを探す、ArrayIteratorは辿らない。
オマケ
以上の性質より、よくあるforループをこう書くこともできる。
for (i = 0; i < A.length; ++i) { }
‖
for (i of A.keys()) { }
実装バージョン
V8 3.20.14