| 
 Вопрос по array.length Здравствуйте. Вот у меня тут возник спор с человеком, далеким от js - с "правильным программистом" C++. Суть спора такова, он утверждает, что конструкция for(i=0; i < arr.length; i++) не правильная, и что необходимо использовать конструкцию for(i=0, l = arr.length; i<l; i++), уверяя меня в том, что при каждом цикле for идет просчет arr.length. Но разве length не является внутренней переменной объекта array? Разве последней конструкцией мы не даем просто ссылку на arr.length? | 
| 
 mexoboy, а слабо провести тест для обоих случаев и не полагаться на чьё-то мнение? ps: найдете когда-нибудь это важным для ускорения и сможете доказать, я с удовольствием вас послушаю. а так это сравнимо с прикручиванием педалей к истребителю | 
| 
 Я всегда "length = arr.length" пишу. Это называется кеширование значений. | 
| 
 Цитата: 
 ЗЫ А еще правильней делать так for(i=0, l = arr.length; i<l; ++i)Или даже так for(i=arr.length; i--;) | 
| 
 2Gozar, ну вот как раз тесты ничего не показывают. при 5 миллионах итераций время всегда расходится в пользу разных методов, исходя из этого и был задан данный вопрос. Дело не в ускорении, а вообще в принципе работы array.length. Педали никто не собирается прикручивать, а спор остается спором. В другом другом языке вопросов-бы не было, но в js этот вопрос не тривиален. P.s. Да, действительно, l не будет являться ссылкой =( Странно, что во многих фреймворках как раз пишут без объявления переменной length, а обращаются на прямую к arr.length . var a = [1,2,3]; var l = a.length; a.push(4); console.log(l); | 
| 
 Не факт, что length реализовано, как getter. Даже можно сказать, что скорее всего это обычное свойство, потому что Array.prototype.push.call(obj, 1) добавит length к obj во всех браузерах, поэтому обращение к length массива происходит не дольше, чем к любому другому свойству объекта, содержащему числовое значение, которое не пересчитывается каждый раз. Вот с NodeList уже другое дело, это динамическая структура. Но я люблю гоняться за сверх скоростями и обычно пишу так: 
var i = -1, length = array.length;
while (++i < length) {
    array[i]
}
если возможно, так: 
var i = array.length;
while (i--) {
    array[i]
}
 | 
| 
 Цитата: 
 Цитата: 
 | 
| 
 Цитата: 
 Цитата: 
 Цитата: 
 http://javascript.ru/ecma/part15#a-15.4.5.1 | 
| 
 Цитата: 
 | 
| 
 Цитата: 
 UPD Цитата: 
 | 
| Часовой пояс GMT +3, время: 16:23. |