Frage JavaScript - Eigenschaft von undefined kann nicht festgelegt werden


Mein Code:

    var a = "1",
        b = "hello",
        c = { "100" : "some important data" },
        d = {};

        d[a]["greeting"] = b;
        d[a]["data"] = c;

        console.debug (d);

Ich erhalte den folgenden Fehler:

Uncaught TypeError: Kann die 'Begrüßung' der Eigenschaft nicht definieren.

Ich versuche etwas Ähnliches wie ein assoziatives Array zu machen. Warum funktioniert das nicht?


76
2017-09-20 02:44


Ursprung


Antworten:


du hast dich nie festgelegt d[a] zu irgendeinem Wert.

Aus diesem Grund, d[a] bewertet zu undefinedund Sie können keine Eigenschaften festlegen undefined.

Wenn Sie hinzufügen d[a] = {} gleich nach d = {} Dinge sollten wie erwartet funktionieren.

Alternativ könnten Sie einen Objektinitialisierer verwenden:

d[a] = {
    greetings: b,
    data: c
};

Oder Sie können alle Eigenschaften von festlegen d in einer anonymen Funktionsinstanz:

d = new function () {
    this[a] = {
        greetings: b,
        data: c
    };
};

Wenn Sie sich in einer Umgebung befinden, die ES2015-Funktionen unterstützt, können Sie verwenden berechnete Eigenschaftsnamen:

d = {
  [a]: {
    greetings: b,
    data: c
  }
};

108
2017-09-20 02:45



Sie müssen einstellen d[a] entweder zu einem assoziativen Array oder einem Objekt:

  • d[a] = [];
  • d[a] = {};

Ohne Einstellung, das ist was passiert:

d[a] == undefinedAlso machst du es undefined['greeting']=b; und definitionsgemäß hat undefined keine Eigenschaften. Daher der Fehler, den Sie erhalten haben.


24
2017-09-20 02:51



Das Objekt gespeichert bei d[a] wurde auf nichts eingestellt. So, d[a] bewertet zu undefined. Sie können keine Eigenschaft zuweisen undefined :). Sie müssen ein Objekt oder ein Array zuweisen d[a]:

d[a] = [];
d[a]["greeting"] = b;

console.debug(d);

5
2017-09-20 02:47



In Javascript ist fast alles ein Objekt, null und undefined sind eine Ausnahme.

Instanzen von Array ist ein Objekt. Damit Sie die Eigenschaft eines Arrays festlegen können, können Sie aus demselben Grund nicht die Eigenschaft eines undefinierten Objekts festlegen NICHT ein Objekt


4
2017-09-20 03:40



Ich würde nur eine einfache Überprüfung durchführen, um zu sehen, ob d [a] existiert und wenn nicht, initiiere es ...

var a = "1",
    b = "hello",
    c = { "100" : "some important data" },
    d = {};

    if (d[a] === undefined) {
        d[a] = {}
    };
    d[a]["greeting"] = b;
    d[a]["data"] = c;

    console.debug (d);

0
2018-03-31 21:19