Pregunta

var something = {

wtf: null,
omg: null
};

Mi conocimiento de JavaScript sigue siendo terriblemente irregular desde la última vez que programé con él, pero creo que ahora lo he vuelto a aprender. Excepto por esto. No recuerdo haber visto esto antes. ¿Qué es? ¿Y dónde puedo obtener más información al respecto?

¿Fue útil?

Solución

Es un objeto literal con dos propiedades. Por lo general, así es como las personas crean matrices asociativas o hashes porque JS no admite esa estructura de datos de forma nativa. Aunque tenga en cuenta que todavía es un objeto de pleno derecho, incluso puede agregar funciones como propiedades:

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

Y puedes recorrer las propiedades usando un bucle for:

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

Otros consejos

Es sintaxis de objeto literal. '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;

Consulte la documentación de Mozilla sobre los literales de los objetos: http: //developer.mozilla. org / En / Core_JavaScript_1.5_Guide: Literals # Object_Literals

Explicación de la sección " Quiero una matriz asociativa en Javascript " punto de vista (que es para lo que en muchos casos se utilizan los literales de objetos)

De " Dominar dominios de Javascript "

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, & # 8230; Todas las matrices en Javascript son objetos y la sintaxis de objetos de Javascript proporciona una emulación básica de una matriz asociativa. Por esta razón, el código de ejemplo anterior realmente funcionará. Tenga en cuenta que esto no es una matriz real y tiene escollos reales si intenta usarlo. 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 integrados.

Puede recorrer las propiedades de un objeto con el siguiente bucle & # 8230;

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 pusimos nada en el Array, lo colocamos en el objeto associativeArray. associativeArray [0] no estará definido.

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

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

La conclusión es: no intente utilizar matrices asociativas, codifique tal como son: propiedades de objetos, no matrices.

Es un literal de objeto (o, a veces, un objeto de vainilla en bibliotecas con clases de hash).

Lo mismo que:

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

Este es un objeto literal. Es efectivamente equivalente a lo siguiente:

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

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

podrías decir

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

echa un vistazo a JSON.ORG

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 misma que

something["wtf"]=null;

Para que puedas usar:

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

Este es un ejemplo de creación de instancias de objetos de JavaScript en línea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top