Pregunta JavaScript - no puede establecer la propiedad de indefinido


Mi código:

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

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

        console.debug (d);

Obtuve el siguiente error:

Unkeught TypeError: no se puede establecer la propiedad 'saludo' de indefinido.

Estoy tratando de hacer algo similar a una matriz asociativa. ¿Por qué no está funcionando?


76
2017-09-20 02:44


origen


Respuestas:


nunca estableces d[a] a cualquier valor.

Debido a esto, d[a] evalúa a undefinedy no puedes configurar propiedades en undefined.

Si agrega d[a] = {} justo después de d = {} las cosas deberían funcionar como se esperaba

Alternativamente, puede usar un inicializador de objetos:

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

O puede establecer todas las propiedades de d en una instancia de función anónima:

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

Si se encuentra en un entorno compatible con las características de ES2015, puede usar nombres de propiedad computados:

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

108
2017-09-20 02:45



Tienes que establecer d[a] a una matriz asociativa, o un objeto:

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

Sin configuración, esto es lo que está sucediendo:

d[a] == undefined, entonces estás haciendo undefined['greeting']=b; y por definición, undefined no tiene propiedades. Por lo tanto, el error que recibió.


24
2017-09-20 02:51



El objeto almacenado en d[a] no ha sido configurado para nada. Así, d[a] evalúa a undefined. No puede asignar una propiedad a undefined :). Debe asignar un objeto o matriz a d[a]:

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

console.debug(d);

5
2017-09-20 02:47



En javascript, casi todo es un objeto, null y undefined son una excepción

Instancias de Array es un objeto. para que pueda establecer la propiedad de una matriz, por la misma razón, no puede establecer la propiedad de una indefinida, porque es NO un objeto


4
2017-09-20 03:40



Haría una simple comprobación para ver si d [a] existe y si no lo inicializo ...

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