tablas - recorrer tabla javascript
Por que{....0} evaluar para{}? (4)
Acabo de encontrar
{....0}
en el código de un amigo.
Evaluándolo en la consola devuelve
{}
(objeto vacío).
¿Porqué es eso? ¿Cuál es el significado de 4 puntos en JavaScript?
Cuatro puntos en realidad no tienen ningún significado.
...
es el
operador de propagación
, y
.0
es la abreviatura de
0.0
.
Al distribuir 0 (o cualquier número) en un objeto, se obtiene un objeto vacío, por lo tanto,
{}
.
El operador de propagación
{...}
permite expandir los iterables.
Esto significa que los tipos de datos que se pueden definir en forma de pares
key-value
se pueden expandir.
En términos de
Object
, llamamos par clave-valor como propiedad de Objeto y su valor, mientras que en términos de
arrays
podemos pensar en el índice como clave y elemento en la matriz como su valor.
let obj = { a: 4, b: 1};
let obj2 = { ...obj, c: 2, d: 4}; // {a: 4, b: 1, c: 2, d: 4}
let arr1 = [''1'', ''2''];
let obj3 = { ...arr1, ...[''3'']}; // {0: "3", 1: "2"}
En términos de matriz, ya que toma el índice como clave, aquí reemplaza el elemento ''1'' de
arr1
por ''3'' porque ambos tienen el mismo índice en una matriz diferente.
Con cadenas demasiado extendidas, el operador devuelve el objeto no vacío. Como cadena es una matriz de caracteres, trata la cadena como una matriz.
let obj4 = {...''hi'',...''hello''} // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...''y'',...''x''} // {0: "x" }
Pero con otros tipos de datos primitivos devuelve un objeto vacío
con numeros
let obj6 = { ...0.0, ...55} // {}
con booleano
let obj7 = { ...true, ...false} // {}
En conclusión, los tipos de datos que pueden tratarse en forma de pares clave-valor cuando se usan con el operador de propagación
{...}
devuelven un objeto no vacío
{}
En términos simples,
{...}
operador de extensión en javascript extiende un objeto / matriz con otro.
Entonces, cuando babelifier intenta extender una con otra, tiene que identificar si está tratando de extender una matriz o un objeto.
En el caso de
array
, itera sobre elementos.
En el caso de
object
, itera sobre teclas.
En este escenario, el babelyfier está intentando extraer claves para el
number
al verificar la
own property call
del Objeto que falta para el
number
por lo que devuelve el Objeto vacío.
Tres puntos en un objeto literal son una propiedad de propagación , por ejemplo:
const a = { b: 1, c: 1 };
const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
El último punto con un 0 es un número literal
.0
es lo mismo que
0.0
.
Por lo tanto esto:
{ ...(0.0) }
distribuye todas las propiedades del objeto número en el objeto, sin embargo, como los números no tienen ninguna propiedad (propia), usted recupera un objeto vacío.