JavaScriptではオブジェクトのプロパティのキー(名前)として文字列とSymbolが使用可能とされている。ドット記法では有効な識別子も可。
さて以下のようなコードを見たのだが正しいのだろうか?
const fruits = ["Orange", "Apple", "Banana"];
const obj = {};
for(let i=0; i<3; i++) {
obj[i] = fruits[i];
}
console.log(typeof Object.keys(obj)[1]);
//string
というのは、変数 i は整数であり文字列でもSymbolでもないからだ。
obj[0]、obj[1]、obj[2]は文法エラーかと思ったがそうではなかった。
正解は「ブラケット記法では[]の中に任意の式が書け、その評価結果は暗黙的に文字列へ変換される」ということだった。7行目にあるとおり確かに文字列になっている。
つまりobj[“0”]、obj[“1”]、obj[“2”]として処理されるということか。アクセスする際はobj[0]、obj[1]、obj[2]で問題ない。
※参考情報
- 「JavaScript Primer 迷わないための入門書」azu、Suguru Inatomi 著
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types