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úaundefined
y 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
d
en 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
array
oobject
. JS no tiene matrices asociativas, aunqueObject
puede 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
null
yundefined
es una excepción.Ejemplos 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 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