Maison  >  Article  >  interface Web  >  Pourquoi [[]][ []] [ []] renvoie-t-il « 10 » en JavaScript ?

Pourquoi [[]][ []] [ []] renvoie-t-il « 10 » en JavaScript ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-17 15:09:02826parcourir

Why does   [[]][ []] [ []] return

Dévoilement du mystère derrière la valeur de retour de [[]][ []] [ []]

Dans le domaine de JavaScript, l'expression énigmatique [[]][ []] [ []] en laisse beaucoup perplexes avec sa valeur de retour apparemment absurde : "10". En plongeant dans les profondeurs du processus d'évaluation de JavaScript, nous nous lançons dans un voyage pour déchiffrer ce puzzle.

Dans un premier temps, décomposons l'expression :

++[[]][+[]]
+
[+[]]

Expansion [[]] [ []]

En JavaScript, l'expression [] est évaluée à 0. En effet, les tentatives de conversion de l'opérande en nombre et un tableau vide sont contraints à une chaîne, qui est ensuite convertie en un nombre donnant 0.

En remplaçant [] par son équivalent, on obtient :

++[[]][0]
+
[+[]]

Évaluer [[]][0]

L'opérateur incrémente son opérande de un, donc [[]][0] est équivalent à ([[]][0]) 1. Puisque [[]][0] récupère le premier élément du tableau vide, il renvoie un autre tableau vide. Ainsi, ([[]][0]) est équivalent à [], dont nous savons que donne 0.

Simplifiant l'expression restante

En simplifiant davantage, nous obtenons :

1
+
[+[]]

La magie de coercition de JavaScript

Les règles de coercition de JavaScript entrent en jeu lorsqu'il s'agit de l'ajout d'un tableau et d'un nombre. Tout d'abord, le tableau est contraint à une chaîne ("0"), puis le nombre est contraint à une chaîne ("1"). La concaténation de chaînes donne le résultat final :

console.log("1" + "0") // "10"

Contexte supplémentaire

  • L'expression [[]] peut être comprise comme un moyen court de contraindre un tableau en un nombre (0).
  • L'opération [] n'est pas explicitement définie dans la spécification JavaScript, mais elle est le résultat d'une série d'étapes de coercition.
  • Les règles de coercition de JavaScript peuvent conduire à comportement inattendu dans certains scénarios, mais ils offrent une flexibilité dans la conversion des valeurs en différents types.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn