Skip to content

Commit cca783b

Browse files
committed
arrays
1 parent 2fe7e5d commit cca783b

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

doc/ru/array/constructor.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## Конструктор `Array`
22

3-
Так как в конструкторе `Array` есть некоторая двусмысленность касающаяся его параметров, настоятельно рекомендуется при создании массивов всегда использовать синтаксис литеральной нотации — `[]`.
3+
Так как конструктор `Array` не однозначен в плане вариантов перечисления его параметров, настоятельно рекомендуется при создании массивов всегда использовать синтаксис литеральной нотации — `[]`.
44

55
[1, 2, 3]; // Результат: [1, 2, 3]
66
new Array(1, 2, 3); // Результат: [1, 2, 3]
@@ -9,17 +9,17 @@
99
new Array(3); // Результат: []
1010
new Array('3') // Результат: ['3']
1111

12-
В случае, когда в конструктор `Array` передаётся один аргумент и этот аргумент имеет тип `Number`, конструктор возвращает новый, *заполненный случайными значениями* (в зале подсказывают, _разреженный_), массив, имеющий длину равную значению переданного аргумента. Стоит заметить, что в этом случае будет установлено только свойство `length` нового массива, индексы массива фактически не будут проинициализированы.
12+
В случае, когда конструктору `Array` передаётся только один аргумент, и этот аргумент имеет тип `Number`, конструктор возвращает новый, _разреженный_ (''прим. перев.'' — *заполненный случайными значениями*), массив, имеющий длину, равную значению переданного аргумента. Стоит заметить, что таким образом будет установлено лишь свойство `length` нового массива, а реальные индексы массива не будут инициализированы.
1313

1414
var arr = new Array(3);
1515
arr[1]; // не определён, undefined
1616
1 in arr; // false, индекс не был установлен
1717

18-
Поведение, которое позволяет изначально установить только размер массива может пригодиться лишь в нескольких случаях, таких как повторение строки, за счёт чего избегается использование цикла `for loop`.
18+
Поведение, которое позволяет заранее установить размер массива может пригодиться лишь в нескольких случаяхтаких как повторение строки, за счёт которого избегается использование кода `for loop`.
1919

2020
new Array(count + 1).join(stringToRepeat);
2121

2222
### Заключение
2323

24-
Использование конструктора `Array` нужно избегать, насколько это возможно. Литералы определённо предпочтительнее — это краткая запись и она имеет более понятный синтаксис, так что при этом даже улучшается читабельность кода.
24+
Нужно избегать использования конструктора `Array`. Литералы, определённо, более предпочтительны — это краткая запись, она имеет более «чистый» синтаксис и повышает читабельность кода.
2525

doc/ru/array/general.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
##  Итерации по массивам и свойства
1+
##  Перебор массивов и свойств объектов
22

3-
Несмотря на то, что массивы в JavaScript являются объектами, нет достаточных оснований для использования [цикла `for in`](#object.forinloop) для итерации по элементам массива. Фактически, существует несколько весомых причин **против** использования `for in` в массивах.
3+
Несмотря на то, что массивы в JavaScript являются объектами, достаточных оснований использовать [цикл `for in`](#object.forinloop) для перебора элементов массива **не существует**. Наоборот, существует достаточно хороших причин **против** использования `for in` с массивами.
44

5-
> **Замечание:** Массивы в JavaScript **не** являются *ассоциативными массивами*. Для связывания ключей и значений в JavaScript есть только [объекты](#object.general). И при том, что ассоциативные массивы **сохраняют** заданный порядок, объекты **не** делают этого.
5+
> **Замечание:** Массивы в JavaScript **не** являются *ассоциативными массивами*. Для связывания ключей и значений в JavaScript есть только [объекты](#object.general). При этом, ассоциативные массивы априори **сохраняют** заданный порядок свойств, объекты же **не** делают этого.
66
7-
Во время выполнения `for in` циклически перебираются все свойства объекта, находящиеся в цепочке прототипов. Единственный способ исключить ненужные свойства — использовать [`hasOwnProperty`](#object.hasownproperty), а это **до 20 раз** медленнее обычного цикла `for`.
7+
Поскольку во время выполнения `for in` циклически перебираются все свойства объекта, находящиеся в его цепочке прототипов, а единственный способ исключить ненужные свойства — использовать [`hasOwnProperty`](#object.hasownproperty) — такой цикл **до 20 раз** медленнее обычного цикла `for`.
88

99
### Итерирование
1010

11-
Для достижения лучшей производительности при итерации по массивам, лучше всего использовать обычный цикл `for`.
11+
Для достижения лучшей производительности при переборе массивов, лучше всего использовать обычный цикл `for`.
1212

1313
var list = [1, 2, 3, 4, 5, ...... 100000000];
1414
for(var i = 0, l = list.length; i < l; i++) {
@@ -17,13 +17,15 @@
1717

1818
В примере выше есть один дополнительный приём, с помощью которого кэшируется величина длины массива: `l = list.length`.
1919

20-
Несмотря на то, что свойство `length` определено в самом массиве, поиск этого свойства накладывает дополнительные расходы на каждой итерации цикла. Пусть в этом случае новые движки JavaScript теоретически **могут** применить оптимизацию, но нет никакого способа узнать, будет оптимизирован код на новом движке или нет.
20+
Несмотря на то, что свойство `length` определено в самом массиве, поиск этого свойства в объекте накладывает дополнительные расходы на каждой итерации цикла. Пусть в этом случае новые движки JavaScript и **могут** теоретически применить оптимизацию, всё же нет способа точно предугадать, будет оптимизирован код на новом движке или нет.
2121

22-
Фактически, отсутствие кэширования может привести к выполнению цикла в **два раза медленнее**, чем при кэшировании длины
22+
Фактически, цикл без кэширования может выполняться в **два раза медленнее**, нежели цикл с кэшированной длиной.
23+
24+
''Прим. перев.'' — если вам нужно перебрать элементы в обратном порядке или порядок не имеет для вас значения, есть дополнительный способ (не самый быстрый, поскольку происходит сравнение без приведения типов) перебрать элементы массива: `var i = arr.length; while (i--) { ... }`.
2325

2426
### Свойство `length`
2527

26-
Хотя *геттер* свойства `length` просто возвращает количество элементов содежащихся в массиве, *сеттер* можно использовать для **обрезания** массива.
28+
Хотя *геттер* свойства `length` всего лишь возвращает количество элементов содержащихся в массиве, *сеттер* оказывается удобно использовать для **урезания** массивов.
2729

2830
var foo = [1, 2, 3, 4, 5, 6];
2931
foo.length = 3;
@@ -32,9 +34,9 @@
3234
foo.length = 6;
3335
foo; // [1, 2, 3]
3436

35-
Присвоение свойству `length` меньшей величины урезает массив, однако присвоение большего значения не даст никакого эффекта.
37+
Присвоение свойству `length` меньшей величины урезает массив, однако присвоение большего значения не даёт никакого эффекта.
3638

3739
### Заключение
3840

39-
Для оптимальной работы кода рекомендуется всегда использовать простой цикл `for` и кэшировать свойство `length`. Использование `for in` с массивами является признаком плохого кода, обладающего предпосылками к ошибкам и может привести к низкой скорости его выполнения.
41+
Для оптимальной работы кода рекомендуется всегда использовать простой цикл `for` и кэшировать свойство `length`. Использование `for in` с массивами является признаком плохого кода, содержащего потенциальные ошибки, а также приводит к низкой скорости его выполнения.
4042

0 commit comments

Comments
 (0)