2016-04-12 7 views
0

An verschiedenen Stellen wird ein Element aus Array bei Index verwendet. Instinct sagt, ersetze ihn durch eine Variable, die auf dieses Element zeigt und benutze es. Aber gibt es einen anderen Unterschied als für bessere Lesbarkeit/Verwaltung?Indexierter Zugriff vs Variable in JavaScript

Beispiel 1:

if (cols[i]["Type"] === 4) { 
    this.someFunc(cols[i]["Name"], cols[i]["Value"].VarA, cols[i]["Value"].VarB); 
} 

Beispiel 2:

var col = cols[i]; 
if (col["Type"] === 4) { 
    this.someFunc(col["Name"], col["Value"].VarA, col["Value"].VarB); 
} 
+0

Beispiel 2 wird etwas schneller sein, mit Cache-Version. – Tushar

+0

Sie können 'col.Value.VarA' schreiben. Sie gewinnen 3 Zeichen – R3tep

+0

, wenn Sie die Lesbarkeit verbessern möchten, verwenden Sie Punktnotation – maioman

Antwort

1

Es scheint mir, dass Sie den Wert direkt über variable Referenzierung ist schneller als der Wert über Feldelement Referenzierung:

https://jsfiddle.net/cLf7k35n/

var test = 4; 
var myArray = [0, 1, 2, 3, 4]; 

console.time("array_reference"); 
if (myArray[4] === 4) { 
    console.log(myArray[4]); 
} 
console.timeEnd("array_reference"); 

console.time("variable_reference"); 
if (test === 4) { 
    console.log(test); 
} 
console.timeEnd("variable_reference"); 

Überprüfen Sie die Konsole für den Timer. In dem spezifischen, nicht komplexen Beispiel, das ich gemacht habe, schien die Array-Referenz mindestens 1,2 Millisekunden langsamer zu sein.

+0

Forkte Ihre Geige, um variable Zuweisung aufzunehmen und führte die Tests durch. Durchschnittlich war es im Durchschnitt dreimal schneller über Variable. https://jsfiddle.net/p0cj3tzg/ – Yahya

1

Beispiel 2 wird nicht so mehrere Array-Lookups tun müssen, wird etwas schneller sein. Das wird gesagt, die JIT wird höchstwahrscheinlich das für Sie hissen.

Meiner Meinung nach ist Beispiel 2 lesbarer und damit leichter zu pflegen, also würde ich damit gehen.

Auch wie R3tep angegeben hat, können Sie col.Type und col.Value.VarA verwenden, um die Lesbarkeit weiter zu verbessern.

+0

Ihre Antwort ist auch relevant, aber die andere Antwort lieferte ein Beispiel zum Testen. Danke für deine Antwort. – Yahya

Verwandte Themen