|
1 | 1 | ## Итерации по массивам и свойства |
2 | 2 |
|
3 | | -Не смотря на то, что массивы в JavaScript являются объектами, нет достаточных оснований для использования [цикла `for in`](#object.forinloop) для итерации по элементами. Фактически, существует несколько весомых причин **против** использования `for in` в массивах. |
| 3 | +Несмотря на то, что массивы в JavaScript являются объектами, нет достаточных оснований для использования [цикла `for in`](#object.forinloop) для итерации по элементам массива. Фактически, существует несколько весомых причин **против** использования `for in` в массивах. |
4 | 4 |
|
5 | 5 | > **Замечание:** Массивы в JavaScript **не** являются *ассоциативными массивами*. Для связывания ключей и значений в JavaScript есть только [объекты](#object.general). И при том, что ассоциативные массивы **сохраняют** заданный порядок, объекты **не** делают этого. |
6 | 6 |
|
|
17 | 17 |
|
18 | 18 | В примере выше есть один дополнительный приём, с помощью которого кэшируется величина длины массива: `l = list.length`. |
19 | 19 |
|
20 | | -Не смотря на то, что свойство length определено в самом массиве, поиск этого свойства накладывает дополнительные расходы на каждой итерации цикла. Несмотря на то, что в этом случае новые движки JavaScript **могут** применять оптимизацию, нет способа узнать, будет оптимизирован код на новом движке или нет. |
| 20 | +Несмотря на то, что свойство `length` определено в самом массиве, поиск этого свойства накладывает дополнительные расходы на каждой итерации цикла. Пусть в этом случае новые движки JavaScript теоретически **могут** применить оптимизацию, но нет никакого способа узнать, будет оптимизирован код на новом движке или нет. |
21 | 21 |
|
22 | 22 | Фактически, отсутствие кэширования может привести к выполнению цикла в **два раза медленнее**, чем при кэшировании длины |
23 | 23 |
|
24 | 24 | ### Свойство `length` |
25 | 25 |
|
26 | | -Несмотря на то, что *геттер* свойства `length` просто возвращает количество элементов содежащихся в массиве, *сеттер* можно использовать для **обрезания** массива. |
| 26 | +Хотя *геттер* свойства `length` просто возвращает количество элементов содежащихся в массиве, *сеттер* можно использовать для **обрезания** массива. |
27 | 27 |
|
28 | 28 | var foo = [1, 2, 3, 4, 5, 6]; |
29 | 29 | foo.length = 3; |
|
32 | 32 | foo.length = 6; |
33 | 33 | foo; // [1, 2, 3] |
34 | 34 |
|
35 | | -Присвоение свойству `length` меньшей величины урезает массив, однако присвоение большего значения не влечёт никакого эффекта. |
| 35 | +Присвоение свойству `length` меньшей величины урезает массив, однако присвоение большего значения не даст никакого эффекта. |
36 | 36 |
|
37 | 37 | ### Заключение |
38 | 38 |
|
39 | | -Для оптимального работы кода рекомендуется всегда использовать простой цикл `for` и кэшировать свойство `length`. Использование `for in` с массивами является признаком плохого кода, обладающего предпосылками к ошибкам и может привести к низкой скорости его выполнения. |
| 39 | +Для оптимальной работы кода рекомендуется всегда использовать простой цикл `for` и кэшировать свойство `length`. Использование `for in` с массивами является признаком плохого кода, обладающего предпосылками к ошибкам и может привести к низкой скорости его выполнения. |
40 | 40 |
|
0 commit comments