2011-08-22 18 views
14

Esta es probablemente una pregunta estúpida novato, pero lo que hace el: representan en el siguiente contexto:¿Qué representan los dos puntos (:) en JavaScript?

var stuffToDo = { 
    'bar' : function() { 
     alert('the value was bar -- yay!'); 
    }, 

    'baz' : function() { 
     alert('boo baz :('); 
    }, 

    'default' : function() { 
     alert('everything else is just ok'); 
    } 
}; 

if (stuffToDo[foo]) { 
    stuffToDo[foo](); 
} else { 
    stuffToDo['default'](); 
} 

¿Se almacena la función de cada una de esas variables?

Respuesta

30

Esta es una object literal[MDN]:

var obj = { 
    key: value 
}; 

// obj.key === value; // true 

Se asigna a una propiedad valuekey de obj. Si bien no hay ninguna restricción para lo que puede ser value (bueno, debe ser algo asignable), existen limitaciones para key: debe ser identifier name, literal de cadena o literal numérico.

Más detalles se pueden encontrar en section 11.1.5 de la especificación ECMAScript.

La notación literal es similar a:

var stuffToDo = {}; // <-- empty object literal 

stuffToDo.bar = function() {...}; 
// or stuffToDo['bar'] = ... 

stuffToDo.baz = function() {...}; 
// or stuffToDo['baz'] = ... 

La mayor diferencia es que cuando se utiliza un objeto literal, no se puede acceder a otras propiedades del objeto durante la declaración.

Esto no funcionará:

var obj = { 
    foo: value, 
    bar: obj.foo 
}; 

mientras que esto hace:

var obj = {}; 
obj.foo = value; 
obj.bar = obj.foo; 

Para completar, hay otros dos usos de dos puntos en JavaScript:

Cuestiones relacionadas