Si vous ouvrez votre JS console et tapez [] + {} === {} + []
il vous dit qu'il est vrai.
Je ne comprends pas pourquoi c'est. J'ai essayé de regarder comment c'est analysée.
Pour [] + {}
le +
ici est l'opérateur d'addition comme opérandes sont les deux littéraux. LHS ne donne pas un nombre en .valueOf()
alors qu'il effectue la concaténation de chaîne à l'aide de .toString()
sur les deux opérandes nous donner des ""
+ "[object Object]"
Pour {} + []
le {}
est vide bloc de code est "ignoré", l' +
opérateur est ici analysée comme unaire opérateur plus, il convertit son opérande pour un certain Nombre. Des tableaux vides converties en un nombre devenue 0
C'est donc ce qui semble être "[object Object]" === 0
qui ne devrait certainement être faux?.
L'identité de l'opérateur vérifie si les deux opérandes sont égaux sans conversion de type. Je ne vois pas comment ce petit plus ponctuellement être vrai. Quelle partie de l'histoire qui me manque?
Edit:
- Je voir si vous tapez ({} + [])
il analyse comme un objet vide faisant le membre de droite de l'égalité à "[object object]". J'ai regardé ce et ( )
, c'est le regroupement de l'opérateur. Alors peut-être que cela a quelque chose à voir avec cela?
Ce n'est pas un doublon de Ce qui est l'explication de ces bizarres JavaScript comportements mentionnés dans le " Wat " parler pour CodeMash 2012?. Réponse de points de balle 1 === 2 ne devrait PAS être vrai.