Что означает обозначение "..." (тройная точка) в массивах?

Я не понимаю, что именно делает нотация ....

Я попробовал простой пример с Бабелем, чтобы понять его ( просмотреть пример), но кажется, что:

Синтаксис 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?

Ответ 1

Оператор распространения ... (

Ответ 2

Выражение [1, 2, 3, ...18] недействительно.

Вы не можете использовать ... с Номер. Вы можете использовать только ... с итерируемым объектом, например Array, String или Объект.

Интересно отметить, что Tracur - другой транспилятор - генерирует ошибку при подаче одного и того же кода:

TypeError. Невозможно распространить неистребимый объект.

Я не интимный с спецификацией, но я думаю, что это может быть бабелей "ошибка".