2008-10-07 28 views
9
var something = { 

wtf: null, 
omg: null 
}; 

Mi conocimiento de JavaScript todavía es terriblemente desigual desde la última vez que lo programé, pero creo que ya aprendí la mayor parte. Excepto por esto. No recuerdo haber visto esto antes. ¿Qué es? ¿Y dónde puedo obtener más información al respecto?¿Qué es esto en JavaScript?

+0

Ahora esta pregunta es contestada, puede que añadir AppJet tiene una explicación sencilla JavaScript, la lección sobre "objetos" lo explica muy agradable: http://appjet.com/ learn-to-program/lessons/objects –

Respuesta

11

Es un objeto literal con dos propiedades. Por lo general, así es como la gente crea matrices asociativas o hash porque JS no admite de forma nativa esa estructura de datos. Aunque tenga en cuenta que todavía es un objeto de pleno derecho, incluso se puede añadir funciones como propiedades:

var myobj = { 
    name: 'SO', 
    hello: function() { 
     alert(this.name); 
    } 
}; 

Y se puede repetir las propiedades utilizando un bucle:

for (i in myobj) { 
    // myobj[i] 
    // Using the brackets (myobj['name']) is the same as using a dot (myobj.name) 
} 
+0

JavaScript no es compatible con arrays/hashes asociativos? Yo diría que todo es una matriz asociativa/hash. –

17

Es la sintaxis literal del objeto. El 'wft' y 'omg' son nombres de propiedad mientras que null y null son los valores de propiedad.

Es equivalente a:

var something = new Object(); 
something.wtf = null; 
something.omg = null; 

Salida documentación de Mozilla en objetos literales: http://developer.mozilla.org/En/Core_JavaScript_1.5_Guide:Literals#Object_Literals

+0

Oh, ya veo. Entonces, de acuerdo con el enlace, ¿una cadena es "" o "como un objeto es {}? No estoy seguro si esa es la mejor manera de describirlo, pero creo que lo entiendo ahora. Gracias. –

2

creo que es un objeto con 2 propiedades, WTF y OMG.

se podría decir

something.wtf = "myMessage"; 
alert(something.wtf); 

la salida JSON.ORG

0

Este es un ejemplo de JavaScript en línea objeto de instancias.

4

Esto es un objeto literal. Es efectivamente equivalente a la siguiente:

var something = new Object(); 
something["wtf"] = null; 
something["omg"] = null; 
5

Es una Objeto literal (o, a veces, un objeto vainilla en las bibliotecas con clases de Hash).

Lo mismo que:

var o = new Object(); 
o.wtf = null; 
o.omg = null; 
6

Explicación de la " Quiero una matriz asociativa en Javascript" punto de vista (que es lo que en muchos casos objeto literales terminan siendo utilizados para)

de "Mastering Javascript Arrays"

Una matriz asociativa es una matriz que utiliza una cadena en lugar de un número como í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 

Javascript no tiene, y no admite matrices asociativas. Sin embargo ... Todas las matrices en Javascript son objetos y la sintaxis del objeto de Javascript proporciona una emulación básica de una matriz asociativa. Por esta razón, el código de ejemplo anterior funcionará realmente. Tenga en cuenta que esta no es una matriz real y tiene verdaderas dificultades si intenta usarla. El elemento 'persona' en el ejemplo se convierte en parte de las propiedades y métodos del objeto Array, al igual que .length, .sort(), .splice() y todas las demás propiedades y métodos incorporados.

Puede bucle a través de propiedades de un objeto con el siguiente bucle ...

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

En el ejemplo anterior, associativeArray.length será cero, porque en realidad no poner nada en la matriz, lo ponemos en Objeto asociativeArray. asociativeArray [0] no estará definido.

El ciclo en el ejemplo anterior también recogerá los métodos, propiedades y prototipos que se hayan agregado a la matriz y no solo sus datos. Muchos de los problemas que tienen las personas con la biblioteca de Prototype es que sus matrices asociativas se rompen porque Prototype agrega algunas funciones de Prototype útiles al objeto Array y para i en bucles x recogen esos métodos adicionales. Esa es la oportunidad de usar Matriz/objetos como matriz asociativa de un hombre pobre.

Como último ejemplo, el código anterior funcionará independientemente de si define asociativeArray como una matriz ([]), un objeto ({}), una expresión regular (//), cadena ("") o cualquier otro objeto Javascript

La línea inferior es - no intente utilizar matrices asociativas, código para lo que son - propiedades del objeto, no matrices.

+0

Gracias por la información, pero ya lo sé en su mayoría. –

1

este código:

var something = {wtf:null} 

tiene el mismo efecto que:

var something={}; 
something.wtf=null; 

O para verbosidad innecesaria:

var something=new Object(); 
something.wtf=null; 

Y es útil recordar que la última línea es la igual que

something["wtf"]=null; 

Así que usted puede utilizar:

var myName="wtf"; 
something[myName]=null;