2017-12-03 6 views
1

キー値のペアをオブジェクト(配列ではなく)に追加できることに気付きました。Javascript:配列にキーと値のペアを追加する

var a = [];  // create the array 
a[0] = "test"; // conventionally setting an index of 0 to a value 
a["foo"] = "bar"; // this actually sets a "key" of the array to "bar" 

私はa.fooの値または `[「foo」を]を取得しようとすると、私は単に「バー」を取得します。エラーは発生しません。

実際にはJavascriptの配列はオブジェクトですが、特別なルールがありますが、これはエラーをスローしないというのは気にかかります。

最新バージョンのChromeを使用しています。

これは問題ないと思われる実際の使用例はありますか?この事実をめぐる慣行は何ですか?

+2

小道具を配列や機能のようなオブジェクトに追加できます。これはバグではありません。 – wostex

答えて

2

は今これを試してみてください。

> Object.getOwnPropertyNames(a) 
[ '0', 'length', 'foo' ] 
> a.length 
1 

はJavaScriptにようこそ!素敵な場所です...

はい、配列に名前付きプロパティを作成できます。いいえ、あなたはおそらくすべきではありません。 Array.lengthにはカウントされません。コードを読んだ開発者のほとんどは、肯定的な結果につながる可能性の低い混乱の瞬間を経験しています。

名前付きプロパティが必要な場合は、(配列ではない)オブジェクトを使用します。

+0

ありがとう、私は長さの例が好きです、それはおそらく良い考えではないことを明らかにします。しかし、私はあなたが何をしているのかを知っている場合に使うのは大丈夫だと思っていますが、他のオプションも最適ではありません。 – Sventies

+0

私はそれらの機会が非常にまれであると思いますが、確かです。私はあなたが自分自身に尋ねなければならないと思います。「6ヵ月後にこのコードに戻っても、私はまだこのコードを理解できますか?」 :) –

+0

絶対に。ありがとう! – Sventies

関連する問題