Lo acabo de encontrar {....0}
en el código de un amigo. Evaluarlo en la consola devuelve {}
(objeto vacío).
¿Porqué es eso? ¿Cuál es el significado de 4 puntos en JavaScript?
Lo acabo de encontrar {....0}
en el código de un amigo. Evaluarlo en la consola devuelve {}
(objeto vacío).
¿Porqué es eso? ¿Cuál es el significado de 4 puntos en JavaScript?
Respuestas:
En realidad, cuatro puntos no tienen ningún significado.
...
es el operador de propagación y.0
es la abreviatura de0.0
.Por lo tanto, la difusión de 0 (o cualquier número) en un objeto produce un objeto vacío
{}
.fuente
Spreading 0 (or any number) yields an empty object
no necesariamente si extiende un número en cualquier otro lugar aparte de un objeto, arrojará un error, por ejemplo, [... 0] arrojará un error.Spreading 0 (or any number) in object literal yields an empty object
Contiene más información útil ..Tres puntos en un objeto literal son una propiedad de extensió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 que
.0
es el mismo que0.0
. Por lo tanto esto:{ ...(0.0) }
distribuye todas las propiedades del objeto numérico en el objeto, sin embargo, como los números no tienen propiedades (propias), se obtiene un objeto vacío.
fuente
Function
(function x() {}), (x.k = 'v'), ({...x})// {k: 'v'}
, pero no funciona paraNumber
(x = 10), (x.k = 'v'), ({...x}) // {}
x.k
lo tanto se perderá.En términos simples, el
{...}
operador de extensión en JavaScript extiende un objeto / matriz con otro.Entonces, cuando babelifier intenta extender uno con otro, 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 las claves.En este escenario, el babelyfier está tratando de extraer claves
number
comprobando el objetoown property call
que falta paranumber
que devuelva el objeto vacío.fuente
El operador de propagación
{...}
permite que los iterables se expandan. Significa que los tipos de datos que se pueden definir en forma dekey-value
pares se pueden expandir. En términos deObject
, llamamos par clave-valor como propiedad del objeto y su valor, mientras que en términos dearrays
podemos pensar en el índice como clave y el 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'
arr1
por '3' porque ambos tienen el mismo índice en una matriz diferente.Con cadenas demasiado extendidas, el operador devuelve un 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 se pueden tratar en forma de pares clave-valor cuando se usan con el operador de propagación
{...}
devuelven un objeto no vacío; de lo contrario, devuelve un objeto vacío{}
fuente