プロパティのキーとしての数値について

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]で問題ない。

※参考情報