web-dev-qa-db-fra.com

Pourquoi {. . . .0} évaluer à {}?

Je viens de trouver {....0} dans le code d'un ami. L'évaluer dans la console retourne {} (objet vide).

Pourquoi donc? Quelle est la signification de 4 points en JavaScript?

77
Mist

Quatre points n'ont en réalité aucune signification. ... est le opérateur d'étalement , et .0 est l'abréviation de 0.0.

Si vous étalez 0 (ou un nombre quelconque) dans un objet, vous obtenez un objet vide, donc {}.

87
NikxDa

Trois points dans un littéral d'objet sont un propriété spread, par exemple:

  const a = { b: 1, c: 1 };
  const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }

Le dernier point avec un 0 est un nombre littéral .0 est identique à 0.0. Par conséquent ceci:

 { ...(0.0) }

étale toutes les propriétés de l'objet numérique dans l'objet. Toutefois, comme les nombres ne possèdent aucune propriété (propre), vous récupérez un objet vide.

55
Jonas Wilms

En termes simples, {...} opérateur de propagation en javascript étend un objet/un tableau avec un autre.

Ainsi, lorsque babelifier essaie d'étendre l'un avec l'autre, il doit identifier s'il essaie d'étendre un tableau ou un objet.

Dans le cas de array, il parcourt les éléments.

Dans le cas de object, il effectue une itération sur les clés.

Dans ce scénario, le babelyfier tente d'extraire des clés pour number en vérifiant le own property call de l'objet qui manque pour number afin qu'il renvoie un objet vide.

6

L'opérateur Spread {...} permet aux iterables de se développer. Cela signifie que les types de données pouvant être définis sous la forme de paires key-value peuvent être développés. En termes de Object, nous appelons paire clé-valeur en tant que propriété Object et sa valeur, tandis qu'en termes de arrays, nous pouvons penser index en tant que clé et élément dans un tableau en tant que valeur.

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 termes de tableau, comme il prend index comme clé, remplace ici l'élément '1' de arr1 par '3' car les deux ont le même index dans un tableau différent.

Avec des chaînes trop étendues, l'opérateur renvoie un objet non vide. Comme string est un tableau de caractères, il est traité comme un tableau.

let obj4 = {...'hi',...'hello'}   // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'}   // {0: "x" }

Mais avec d'autres types de données primitifs, il renvoie un objet vide

avec des nombres

let obj6 = { ...0.0, ...55} // {}

avec booléen

let obj7 = { ...true, ...false} // {}

En conclusion, les types de données pouvant être traités sous forme de paires clé-valeur lorsqu'ils sont utilisés avec l'opérateur d'étalement {...} renvoie un objet non vide, sinon un objet vide {}.

0
an0nym0us