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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top