Длина фактического массива не вычисляется на лету.Он хранится как часть структуры данных массива, поэтому для доступа к нему требуется не больше работы, чем просто выборка значения (нет вычислений).Таким образом, обычно это происходит так же быстро, как и извлечение любого фиксированного свойства объекта.Как вы можете видеть в этом тесте производительности, в принципе нет разницы между получением длины массива и получением свойства объекта:
http://jsperf.com/length-comparisons
Исключением являетсяобъект nodeList, который DOM возвращает из таких функций, как getElementsByTagName()
или getElementsByClassName()
.В них часто гораздо медленнее получить доступ к свойству длины.Вероятно, это связано с тем, что эти объекты nodeList не являются настоящими объектами javascript, и между Javascript и собственным кодом может существовать мост, который необходимо пересекать каждый раз, когда к этим объектам получают доступ.В этом случае было бы НАМНОГО быстрее (в 10-100 раз быстрее) кешировать длину в локальную переменную, а не использовать ее многократно в цикле от нодлиста.Я добавил это к сравнению длины, и вы можете увидеть, насколько оно медленнее.
В некоторых браузерах значительно быстрее поместить длину в локальную переменную и использовать ее оттуда, если вы захотите.обращаться к нему снова и снова (как в цикле).Вот график производительности из приведенного выше теста jsperf: