JavaScript: no se 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:
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?
nunca estableces d[a]
ningún valor.
Debido a esto, d[a]
se evalúa como undefined
y 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 d
una 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
}
};
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ó.