Meu código:
var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};
d[a]["greeting"] = b;
d[a]["data"] = c;
console.debug (d);
Estou tendo o erro a seguir:
TypeError não capturado: Não é possível definir a propriedade 'saudação' de undefined.
Estou tentando fazer algo semelhante a uma matriz associativa. Por que não está funcionando?
javascript
StackOverflowNewbie
fonte
fonte
Respostas:
você nunca define
d[a]
nenhum valor.Por causa disso,
d[a]
avalia comoundefined
e você não pode definir propriedades comoundefined
.Se você adicionar
d[a] = {}
logo depois, asd = {}
coisas funcionarão conforme o esperado.Como alternativa, você pode usar um inicializador de objeto:
Ou você pode definir todas as propriedades de
d
em uma instância de função anônima:Se você estiver em um ambiente compatível com os recursos do ES2015, poderá usar nomes de propriedades computadas :
fonte
Você deve definir
d[a]
uma matriz associativa ou um objeto:d[a] = [];
d[a] = {};
Sem configuração, isto é o que está acontecendo:
d[a] == undefined
, então você está fazendoundefined['greeting']=b;
e, por definição, undefined não tem propriedades. Assim, o erro que você recebeu.fonte
array
ouobject
. JS não tem arrays associativos, emboraObject
possa funcionar como um para usos limitados.O objeto armazenado em
d[a]
não foi definido para nada. Assim,d[a]
avaliaundefined
. Você não pode atribuir uma propriedade aundefined
:). Você precisa atribuir um objeto ou matriz ad[a]
:fonte
d[a] = {};
- o uso de matrizes com teclas não numéricas tende a causar problemas no futuro.Em javascript quase tudo é um objeto
null
eundefined
são exceção.Instâncias de
Array
é um objeto. então você pode definir a propriedade de um array, pela mesma razão, você não pode definir a propriedade de um undefined, porque NÃO é um objetofonte
Eu faria apenas uma verificação simples para ver se d [a] existe e se não inicializaria ...
fonte