2016-09-06 2 views
0

Ich habe zwei Beispiele. Im ersten Beispiel:Object Literale in [] Notation in Javascript

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

     alert(object[1]); 

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

     alert(object["1"]); 

In beiden Beispielen ist der Ausgang "Wert". Ich lese in den Büchern, dass Objekt [1] eine Variable 1 finden und den Wert damit ersetzen wird. Da 1 nicht als Variablenname in Javascript (var 1="some var" //not allowed) deklariert werden kann, ist es nur alert(object[1]) versucht, die in var object = {1 : "value"}; deklarierte Zeichenfolge und Warnungen "value" zu finden.

Da gibt es keinen Unterschied zwischen 1. und 2. Beispielalarme führen zu demselben Ergebnis.

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]); 

Das obige Beispiel ist ein Fehler, da wir ein

var a = "some"; 

Ich bin einfach nur neugierig zu wissen, den Unterschied zwischen erklärt haben. 1 und a.2 und auch wenn mein Verständnis ist richtig in diesen Beispielen?

+0

Im zweiten Beispiel sucht der Interpreter nach der Variablen 'a' – Rayon

Antwort

3

In beiden Beispielen ist der Ausgang "Wert". Ich habe in den Büchern gelesen, dass Objekt [1] eine Variable 1 findet und den Wert damit ersetzt.

Nein. Es dauert eine Zeichenfolge.

Wenn Sie ein Zahlenliteral übergeben, wird die Zahl in eine Zeichenfolge konvertiert.

Wenn Sie ein String-Literal übergeben, wird das String-Literal als String verwendet.

Wenn Sie eine Variable übergeben, erhält sie den Wert dieser Variablen und wandelt sie in eine Zeichenfolge um, wenn sie noch nicht eins ist.

1 ist kein Variablenname. Die Grammatik von JavaScript erfordert, dass es als Zahlenliteral behandelt wird.

Ich bin nur neugierig auf den Unterschied zwischen a. 1 und 2

In Fall 1 übergeben Sie ein Zahlenliteral. In Fall 2 übergeben Sie eine nicht deklarierte Variable. Sie erhalten einen ReferenceError, wenn Sie versuchen, einen Wert aus einer nicht deklarierten Variablen abzurufen.

Sie würden den gleichen Effekt in jedem anderen Kontext erhalten, wo Sie etwas mit einem Wert gemacht haben.

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

Zwei verschiedene Dinge gehen.

Erstens sind Objektschlüssel immer Zeichenfolgen, aber Sie dürfen sie ohne Anführungszeichen schreiben, wenn dies nicht zu Syntaxproblemen führt.

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

Dies sind andere Möglichkeiten des Schreibens

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

Auch wenn a geschieht eine Variable zu sein, wenn verwendet wie in einem Objektliteral es justs bedeutet die Zeichenfolge "a" und hat nichts mit dem zu tun, Variable.

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

Wenn Sie den Wert der Variablen als Eigentum haben wollen, können Sie die folgende Syntax ES6 in modernen Browser verwenden:

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

Die andere Sache ist, was Quentin sagte; Wenn Sie den Wert einer Eigenschaft mit dem Objekt [x] suchen, wird x in eine Zeichenfolge konvertiert.