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.