2016-09-06 4 views
0

私には2つの例があります。最初の例では:JavaScriptの[]表記のオブジェクトリテラル

a. 
    1. var object = {1 : "value"}; 

     alert(object[1]); 

    2. var object = {1 : "value"}; 

     alert(object["1"]); 

両方の例では、出力は「値」です。私はオブジェクト[1]が変数1を見つけ、その値で置き換える本を読む。 1はjavascriptの(var 1="some var" //not allowed)で変数名として宣言することはできませんので、「valuevar object = {1 : "value"};で宣言された文字列と警告を見つけるためだけalert(object[1])回です。

1.と2.の違いはないため、同じ結果が表示されます。

b. 
    1. 
    var object = {a : "value"}; 

    alert(object["a"]); 

     The above example is pretty much clear that it is finding out string "a". 

    2. 
    var object = {a : "value"}; 

    alert(object[a]); 

上記の例では、我々は、私はちょうどの違いを知って好奇心

var a = "some"; 

を宣言したhaventいるので、誤りです。 1とa.2と私の理解が正しい場合は、これらの例ですか?

+0

第2の例では、インタープリタが変数aを探しています – Rayon

答えて

3

両方の例で、出力は「値」です。私は、オブジェクト[1]が変数1を見つけ、その値で置き換える本を読んでいます。

いいえ。文字列が必要です。

数値リテラルを渡すと、数値が文字列に変換されます。

文字列リテラルを渡すと、文字列リテラルが文字列として使用されます。

変数を渡すと、その変数の値が取得され、変数に値がない場合は文字列に変換されます。

1は変数名ではありません。 JavaScriptの文法では、数値リテラルとして扱われる必要があります。

私はちょうどaの違いを知りたいと思っています。 1と2

ケース1では、数値リテラルを渡しています。ケース2では、宣言されていない変数を渡しています。宣言されていない変数から値を取得しようとすると、ReferenceErrorが返されます。

値を使って何かを行っていた他のコンテキストでも同じ効果が得られます。

var foo = 1; // Assigns 1 
var foo = bar; // Throws a reference error because bar is undeclared 
1

2つの異なることが続いています。

まず、オブジェクトキーは常に文字列ですが、構文上の問題が発生しない場合は、引用符なしで記述することができます。

{1: "value"} 
{a: "value"} 

これらaが変数であることを起こる場合でも

{"1": "value"} 
{"a": "value"} 

書き込みの他の方法があり、それはjustsオブジェクトリテラルでそのように使用された場合は、文字列"a"を意味し、とは何の関係もありません変数。

var key = "hmm"; 
var object = {key: "value"}; // object is now {"key": "value"} 

あなたがプロパティとして変数の値を持つようにしたい場合は、あなたが最新のブラウザで、次のES6構文を使用することができます。

object = {[key]: "value"}; // object is now {"hmm": "value"} 

他の事はクエンティンが言ったことです。プロパティ値をオブジェクト[x]で検索すると、xの文字列に変換されます。

関連する問題