O que é essa coisa em JavaScript?
-
05-07-2019 - |
Pergunta
var something = {
wtf: null,
omg: null
};
Meu conhecimento de JavaScript ainda é terrivelmente irregular desde a última vez que eu programei com ele, mas acho que agora reaprendi a maior parte disso. Exceto por isso. Não me lembro de ter visto isso antes. O que é isso? E onde posso aprender mais sobre isso?
Solução
É um objeto literal com duas propriedades. Normalmente, é assim que as pessoas criam matrizes ou hashes associativos porque o JS não suporta nativamente essa estrutura de dados. Embora observe que ainda é um objeto totalmente de pleno direito, você pode até adicionar funções como propriedades:
var myobj = {
name: 'SO',
hello: function() {
alert(this.name);
}
};
E você pode iterar através das propriedades usando um loop para o loop:
for (i in myobj) {
// myobj[i]
// Using the brackets (myobj['name']) is the same as using a dot (myobj.name)
}
Outras dicas
É uma sintaxe literal do objeto. O 'WFT' e 'OMG' são nomes de propriedades enquanto, nulos e nulos são os valores da propriedade.
É equivalente a:
var something = new Object();
something.wtf = null;
something.omg = null;
Confira a documentação de Mozilla sobre literais de objeto: http://developer.mozilla.org/en/core_javascript_1.5_guide:literals#object_literals
Explicação do ponto de vista "Eu quero uma matriz associativa no JavaScript" (que é para que, em muitos casos
A partir de "Dominar as matrizes JavaScript"
Uma matriz associativa é uma matriz que usa uma string em vez de um número como um índice.
var normalArray = [];
normalArray[1] = 'This is an enumerated array';
alert(normalArray[1]); // outputs: This is an enumerated array
var associativeArray = [];
associativeArray['person'] = 'John Smith';
alert(associativeArray['person']); // outputs: John Smith
O JavaScript não possui e não suporta matrizes associativas. No entanto ... todas as matrizes no JavaScript são objetos e a sintaxe do objeto de JavaScript fornece uma emulação básica de uma matriz associativa. Por esse motivo, o código de exemplo acima realmente funcionará. Esteja avisado de que isso não é uma matriz real e tem armadilhas reais se você tentar usá -lo. O elemento 'pessoa' no exemplo se torna parte das propriedades e métodos do objeto da matriz, assim como .Length, .sort (), .splice () e todas as outras propriedades e métodos internos.
Você pode percorrer as propriedades de um objeto com o seguinte loop…
var associativeArray = [];
associativeArray["one"] = "First";
associativeArray["two"] = "Second";
associativeArray["three"] = "Third";
for (i in associativeArray) {
document.writeln(i+':'+associativeArray[i]+', ');
// outputs: one:First, two:Second, three:Third
};
No exemplo acima, o AssociativeArray.length será zero porque, na verdade, não colocamos nada na matriz, colocamos -o no objeto da AssociativeArray. AssociativeArray [0] será indefinido.
O loop no exemplo acima também captará quaisquer métodos, propriedades e protótipos que foram adicionados à matriz e não apenas aos seus dados. Muitos problemas que as pessoas têm com a biblioteca do protótipo é que suas matrizes associativas quebram porque o protótipo adiciona algumas funções úteis do protótipo ao objeto da matriz e, para i em x loops, captura esses métodos adicionais. Esse é o pitfal de usar o Array/Objetos como o Array Associativo de um homem pobre.
Como exemplo final, o código anterior funcionará, independentemente de você definir o AssociativeArray como uma matriz ([]), um objeto ({}), uma expressão regular (//), string ("") ou qualquer outro objeto JavaScript .
A linha inferior é - não tente usar matrizes associativas, codificar o que são - propriedades do objeto, não matrizes.
É um Objeto literal (ou, às vezes, um objeto de baunilha nas bibliotecas com aulas de hash).
A mesma coisa que:
var o = new Object();
o.wtf = null;
o.omg = null;
Este é um objeto literal. É efetivamente equivalente ao seguinte:
var something = new Object();
something["wtf"] = null;
something["omg"] = null;
Eu acredito que é um objeto com 2 propriedades, WTF e OMG.
você poderia dizer
something.wtf = "myMessage";
alert(something.wtf);
Confira json.org
This code:
var something = {wtf:null}
Has the same effect as:
var something={};
something.wtf=null;
Or for unnecessary verbosity:
var something=new Object();
something.wtf=null;
And it's useful to remember that the last line is the same as
something["wtf"]=null;
So you can use:
var myName="wtf";
something[myName]=null;
This is an example of inline JavaScript object instantiation.