2011-08-22 23 views
14

Questa è probabilmente una domanda stupida niubbo, ma che cosa fa il: rappresentano nel contesto seguente:Cosa rappresentano i due punti (:) in 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'](); 
} 

Sta memorizzando la funzione di ciascuna di queste variabili?

risposta

30

Questa è una object literal[MDN]:

var obj = { 
    key: value 
}; 

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

Si assegna value a una proprietà key di obj. Mentre non ci sono restrizioni per ciò che può essere value (beh, deve essere qualcosa di assegnabile), ci sono limitazioni per key: Deve essere uno identifier name, un letterale di stringa o un valore letterale numerico.

Maggiori dettagli possono essere trovati in section 11.1.5 delle specifiche ECMAScript.

La notazione letterale è simile a:

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

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

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

La più grande differenza è che quando si utilizza un oggetto letterale, non è possibile accedere ad altre proprietà dell'oggetto durante la dichiarazione.

Questo non funziona:

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

che questo fa:

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

Per completezza, ci sono altri due usi di due punti in JavaScript:

Problemi correlati