Tout d'abord, permettez-moi de souligner que NaNc'est une valeur très spéciale: par définition, elle n'est pas égale à elle-même. Cela vient de la norme IEEE-754 sur laquelle s'appuient les numéros JavaScript. La valeur "pas un nombre" n'est jamais égale à elle-même, même lorsque les bits correspondent exactement. (Ce qu'ils ne sont pas nécessairement dans IEEE-754, cela permet plusieurs valeurs différentes "pas un nombre".) C'est pourquoi cela arrive même; toutes les autres valeurs en JavaScript sont égales à elles-mêmes, NaNc'est juste spécial.
... est-ce que je manque une valeur dans JavaScript qui retournera true pour x! == x et false pour x! = x?
Non, tu ne l'es pas. La seule différence entre !==et !=est que ce dernier effectuera une coercition de type si nécessaire pour que les types des opérandes soient identiques. Dans x != x, les types d'opérandes sont les mêmes, et donc exactement les mêmes que x !== x.
Ceci est clair dès le début de la définition de l' opération abstraite d'égalité :
- ReturnIfAbrupt (x).
- ReturnIfAbrupt (y).
Si Type (x) est le même que Type (y), alors
Renvoie le résultat de la comparaison d'égalité stricte x === y.
...
Les deux premières étapes sont la plomberie de base. Donc, en fait, la toute première étape ==est de voir si les types sont les mêmes et, si c'est le cas, de le faire à la ===place. !=et ne !==sont que des versions niées de cela.
Donc, si Flanagan a raison, cela ne NaNdonnera vrai que pour x !== x, nous pouvons être sûrs qu'il est également vrai que seul NaNdonnera vrai pour x != x.
De nombreux programmeurs JavaScript utilisent par défaut ===et !==pour éviter certains pièges autour de la contrainte de type que font les opérateurs lâches, mais il n'y a rien à lire dans l'utilisation par Flanagan de l'opérateur strict vs lâche dans ce cas.
!==chèques aux!=chèques. Autant que je sache, il n'y a pas d'autre valeur oùx != x. Mais il existe deux groupes distincts de développeurs JavaScript: ceux qui préfèrent!=et ceux qui préfèrent!==, que ce soit pour la vitesse, la clarté, l'expressivité, etc.