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:
Uncaught TypeError: no se puede establecer la propiedad 'greeting' de undefined.
Estoy tratando de hacer algo similar a una matriz asociativa. ¿Por qué esto no funciona?
javascript
StackOverflowNewbie
fuente
fuente

Respuestas:
nunca estableces
d[a]ningún valor.Debido a esto,
d[a]evalúaundefinedy no puede establecer propiedades enundefined.Si agrega
d[a] = {}justo después, lasd = {}cosas deberían funcionar como se esperaba.Alternativamente, puede usar un inicializador de objeto:
O puede establecer todas las propiedades de
den una instancia de función anónima:Si se encuentra en un entorno que admite las funciones de ES2015, puede utilizar nombres de propiedad calculados :
fuente
Debe establecer
d[a]una matriz asociativa o un objeto:d[a] = [];d[a] = {};Sin configurar, esto es lo que está sucediendo:
d[a] == undefined, así que lo estás haciendoundefined['greeting']=b;y, por definición, undefined no tiene propiedades. Por lo tanto, el error que recibió.fuente
arrayoobject. JS no tiene matrices asociativas, aunqueObjectpuede actuar como una para usos limitados.El objeto almacenado en
d[a]no se ha establecido en nada. Por lo tanto,d[a]evalúa aundefined. No puede asignar una propiedad aundefined:). Necesita asignar un objeto o matriz ad[a]:fuente
d[a] = {};- el uso de matrices con teclas no numéricas tiende a generar problemas en el futuro.En javascript casi todo es un objeto
nullyundefinedes una excepción.Ejemplos de
Arrayes un objeto. para que pueda establecer la propiedad de una matriz, por la misma razón, no puede establecer la propiedad de un indefinido, porque NO es un objetofuente
Solo haría una verificación simple para ver si d [a] existe y, si no, lo inicializaría ...
fuente