tag body attribute javascript arrays ecmascript-6

javascript - body - meta html



¿Qué significa la notación "..."(punto triple) en matrices? (2)

Esta pregunta ya tiene una respuesta aquí:

No entiendo qué hace exactamente la ... notación.

Intenté un ejemplo sencillo con Babel para entenderlo ( ver el ejemplo ), pero parece que:

Sintaxis ES6

let myArray = [1, 2, 3, ...18]; console.log(myArray); // [1, 2, 3] console.log(myArray[4]);// undefined console.log(myArray.length); // 3

es la misma que esta sintaxis de 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

PERO: ¿Qué hace este código? Debido a que la salida ( console.log ) es la misma que en este código (ES5):

var myArray = [1,2,3]; console.log(myArray); // [1, 2, 3] console.log(myArray[4]);// undefined console.log(myArray.length); // 3

¿Qué significa la notación ...18 ?


El ... ( operador de propagación ) funciona al devolver cada valor del índice 0 a la length-1 índice length-1 :

Como ejemplo:

[...''18''] // returns [''1'', ''8'']

que sería lo mismo que:

[''18''[0], ''18''[1]]

Ahora, para obtener una matriz de 1 a 18 , puede hacer esto:

[...Array(19).keys()].slice(1)

O esto con el mapa:

[...Array(18)].map(_=>i++,i=1)

Espero eso ayude.


La expresión [1, 2, 3, ...18] no es válida.

No puedes usar ... con un Number . Solo puede usar ... con un objeto iterable como un Array , String u Object .

Es interesante notar que Tracur - otro transpiler - lanza un error cuando se alimenta el mismo código:

TypeError : no se puede propagar un objeto no iterable.

No estoy familiarizado con la specification pero creo que esto podría ser un "error" de Babel.