You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`arguments` – это специальный массивоподобный объект, который содержит все аргументы функции вместе с их индексами.
78
+
`arguments` – это специальный псевдомассив, который содержит все аргументы функции вместе с их индексами.
79
79
80
80
Например:
81
81
@@ -100,7 +100,7 @@ showName("Илья");
100
100
101
101
Этот способ всё ещё работает, мы можем использовать его и сегодня.
102
102
103
-
Но у него есть один недостаток. Хотя `arguments` похож на массив и он тоже перечисляемый, это всё же не массив. Он не поддерживает методы объекта `Array`, поэтому мы не можем, например, вызвать `arguments.map(...)`.
103
+
Но у него есть один недостаток. Хотя `arguments` похож на массив и он тоже перебираемый, это всё же не массив. Он не поддерживает методы объекта `Array`, поэтому мы не можем, например, вызвать `arguments.map(...)`.
104
104
105
105
К тому же, `arguments` всегда содержит все аргументы функции — мы не можем получить их часть. Остаточные параметры позволяют это сделать.
106
106
@@ -111,20 +111,20 @@ showName("Илья");
111
111
112
112
Пример:
113
113
114
-
<!-- Думаю, здесь лучше сделать PR, чтобы было showArg(2), иначе не совсем ясно, почему не должно быть 1 -->
115
114
```js run
116
115
functionf() {
117
116
letshowArg= () =>alert(arguments[0]);
118
-
showArg();
117
+
showArg(2);
119
118
}
120
119
121
120
f(1); // 1
122
121
```
122
+
123
123
````
124
124
125
125
Как мы помним, у стрелочных функций нет собственного `this`. Теперь мы знаем, что нет и своего объекта `arguments`.
126
126
127
-
## Оператор расширения [#spread-operator]
127
+
## Оператор расширения
128
128
129
129
Мы узнали, как получить массив из списка параметров.
130
130
@@ -152,14 +152,14 @@ alert( Math.max(arr) ); // NaN
152
152
153
153
И тут нам поможет *оператор расширения*. Он похож на остаточные параметры – тоже использует `...`, но делает совершенно противоположное.
154
154
155
-
Когда `...arr` используется при вызове функции, он «расширяет» перечисляемый объект `arr` в список аргументов.
155
+
Когда `...arr` используется при вызове функции, он "расширяет" перебираемый объект `arr` в список аргументов.
156
156
157
157
Для `Math.max`:
158
158
159
159
```js run
160
160
let arr = [3, 5, 1];
161
161
162
-
alert( Math.max(...arr) ); // 5 (оператор «раскрывает» массив в список аргументов)
162
+
alert( Math.max(...arr) ); // 5 (оператор "раскрывает" массив в список аргументов)
163
163
```
164
164
165
165
Этим же способом мы можем передать несколько итерируемых объектов:
Но между `Array.from(obj)` и `[...obj]` есть разница:
222
222
223
-
- `Array.from` работает как с псевдомассивами, так и с простыми итерируемыми объектами
224
-
- Оператор расширения работает только с простыми итерируемыми объектами
223
+
- `Array.from` работает как с псевдомассивами, так и с итерируемыми объектами
224
+
- Оператор расширения работает только с итерируемыми объектами
225
225
226
226
Выходит, что если нужно сделать из чего угодно массив, `Array.from` — более универсальный метод.
227
227
228
228
229
-
## Итого [#summary]
229
+
## Итого
230
230
231
231
Когда мы видим `"..."` в коде, это могут быть как остаточные параметры, так и оператор расширения.
232
232
233
233
Как отличить их друг от друга:
234
234
235
-
- Если `...` располагается в конце аргументов функции, – это «остаточные параметры». Они собирают остальные неуказанные аргументы и делают из них массив.
236
-
- Если `...` встретился в вызове функции или где-либо ещё, – это «оператор расширения». Он извлекает элементы из массива.
235
+
- Если `...` располагается в конце аргументов функции, – это "остаточные параметры". Он собирает остальные неуказанные аргументы и делает из них массив.
236
+
- Если `...` встретился в вызове функции или где-либо ещё, – это "оператор расширения". Он извлекает элементы из массива.
0 commit comments