2016-04-12 2 views
0

В разных местах элемент из массива используется в индексе. Инстинкт говорит заменить его переменной, указывающей на этот элемент, и использовать его. Но есть ли другая разница, чем для лучшей читаемости/управления?Индексированный доступ против переменной в javascript

Пример 1:

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

Пример 2:

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

Пример 2 будет немного быстрее, используя кешированную версию. – Tushar

+0

Вы можете написать 'col.Value.VarA'. Вы выигрываете 3 символа – R3tep

+0

, если хотите улучшить читаемость, используйте точечную нотацию – maioman

ответ

1

Казалось бы мне, что ссылки на значение непосредственно с помощью переменной быстрее, чем ссылки на значение с помощью элемента массива:

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"); 

Проверьте консоль для таймеров. В конкретном, некоммерческом примере, который я сделал, ссылка на массив, по-видимому, была как минимум на 1,2 миллисекунды медленнее.

+0

Спрятал вашу скрипку, чтобы включить переменное назначение и провел тесты. В среднем, в среднем в 3 раза быстрее, чем через переменную. https://jsfiddle.net/p0cj3tzg/ – Yahya

1

Пример 2 не нужно будет сделать несколько подстановочных массив так будет немного быстрее. Если говорить, JIT, скорее всего, поднимет это для вас.

На мой взгляд, пример 2 более читабельен и, следовательно, легче поддерживать, поэтому я бы пошел с этим.

Также как R3tep, вы можете использовать и col.Value.VarA, чтобы улучшить читаемость.

+0

Ваш ответ тоже уместен, но другой ответ послужил примером для тестирования. Спасибо за Ваш ответ. – Yahya

Смежные вопросы