La differenza è nel meccanismo di ricerca: se si utilizza la sintassi del punto, il compilatore saprà al momento della compilazione che si sta accedendo a una proprietà di tale oggetto. Se si utilizza la sintassi della parentesi, la ricerca effettiva della proprietà viene eseguita in fase di esecuzione e ci sarà bisogno di più controllo del tipo - dopo tutto, si potrebbe comporre la stringa chiave in modo dinamico, il valore potrebbe cambiare, o si potrebbe anche chiamare una funzione invece di una variabile, ecc.
Il risultato è una differenza significativa nelle prestazioni: La sintassi del bracketing impiega circa tre volte il tempo necessario per eseguire la sintassi del punto.
Ecco un test po 'di velocità per illustrare il mio punto:
var start : int = getTimer();
var obj:Object = { something : "something" };
for (var i : int = 0; i < 100000000; i++) {
var n:String = obj.something;
}
trace ("Time with dot syntax: "+(getTimer() - start));
start = getTimer();
for (i = 0; i < 100000000; i++) {
var o:String = obj["something"];
}
trace ("Time with bracket syntax: "+(getTimer() - start));
Se i due erano la stessa cosa, tranne che per la notazione, dovrebbero prendere esattamente la stessa quantità di tempo. Ma come puoi vedere, non è questo il caso. Sulla mia macchina:
Time with dot syntax: 3937
Time with bracket syntax: 9857
grazie, bella copertina –
Punto bonus per benchmark! –