Что означает обозначение "..." (тройная точка) в массивах?
Я не понимаю, что именно делает нотация ...
.
Я попробовал простой пример с Бабелем, чтобы понять его ( просмотреть пример), но кажется, что:
Синтаксис ES6
let myArray = [1, 2, 3, ...18];
console.log(myArray); // [1, 2, 3]
console.log(myArray[4]);// undefined
console.log(myArray.length); // 3
совпадает с этим синтаксисом ES5:
"use strict";
function _toConsumableArray(arr) {
if (Array.isArray(arr)) {
for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
arr2[i] = arr[i];
}
return arr2;
} else {
return Array.from(arr);
}
}
var myArray = [1, 2, 3].concat(_toConsumableArray(18));
console.log(myArray); // [1, 2, 3]
console.log(myArray[4]); // undefined
console.log(myArray.length); // 3
НО: Что делает этот код? Поскольку вывод (console.log
) такой же, как в этом коде (ES5):
var myArray = [1,2,3];
console.log(myArray); // [1, 2, 3]
console.log(myArray[4]);// undefined
console.log(myArray.length); // 3
Что означает обозначение ...18
?
Ответы
Ответ 2
Выражение [1, 2, 3, ...18]
недействительно.
Вы не можете использовать ...
с Номер. Вы можете использовать только ...
с итерируемым объектом, например Array, String или Объект.
Интересно отметить, что Tracur - другой транспилятор - генерирует ошибку при подаче одного и того же кода:
TypeError. Невозможно распространить неистребимый объект.
Я не интимный с спецификацией, но я думаю, что это может быть бабелей "ошибка".