JavaScript: no se puede establecer la propiedad de indefinido

Resuelto StackOverflowNewbie asked hace 12 años • 8 respuestas

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:

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

Estoy intentando hacer algo similar a una matriz asociativa. ¿Por qué esto no funciona?

StackOverflowNewbie avatar Sep 20 '11 09:09 StackOverflowNewbie
Aceptado

nunca estableces d[a]ningún valor.

Debido a esto, d[a]se evalúa como undefinedy no se pueden establecer propiedades en undefined.

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

Alternativamente, puedes usar un inicializador de objetos:

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

O podrías establecer todas las propiedades de duna instancia de función anónima:

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

Si se encuentra en un entorno que admite funciones de ES2015, puede utilizar nombres de propiedad calculados :

d = {
  [a]: {
    greetings: b,
    data: c
  }
};
zzzzBov avatar Sep 20 '2011 02:09 zzzzBov

Tienes que configurarlo d[a]como una matriz asociativa o un objeto:

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

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

d[a] == undefined, eso es lo que estás haciendo undefined['greeting']=b;y, por definición, undefinido no tiene propiedades. De ahí el error que recibió.

vol7ron avatar Sep 20 '2011 02:09 vol7ron