w3schools una tipos paso pasar parametros funciones funcion desde argumentos anidadas javascript

javascript - una - paso de parametros js



JavaScript-no puede establecer la propiedad de indefinido (5)

Debe establecer d[a] en una matriz asociativa o un objeto:

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

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

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

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?


El objeto almacenado en d[a] no se ha establecido en nada. Por lo tanto, d[a] evalúa como 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);


En javascript, casi todo es un objeto, null e undefined son excepciones.

Instances of 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 NO es un objeto


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);


nunca establece d[a] en ningún valor.

Debido a esto, d[a] evalúa como undefined , y no puede establecer propiedades en undefined .

Si agrega d[a] = {} justo después de d = {} 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 calculados :

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