Quelle est la différence entre (NaN != NaN) et (NaN !== NaN)?

Tout d'abord, je tiens à mentionner que je sais comment isNaN() et Number.isNaN() travail. Je suis de lecture Le Précise le Guide de par David Flanagan et il donne un exemple de la façon de vérifier si la valeur est NaN:

x !== x

Ce résultat true si et seulement si x est NaN.

Mais maintenant j'ai une question: pourquoi utilise-t-il une comparaison stricte? Parce qu'il semble que

x != x

se comporte de la même manière. Est-il sécuritaire d'utiliser les deux versions, ou il me manque une certaine valeur(s) dans le JavaScript qui sera de retour true pour x !== x et false pour x != x?

  • À mon avis , une comparaison stricte (===) est plus précis que les autres. parce qu'il compare non seulement la valeur, mais aussi le type de données de cet objet.
  • ok, mais le type de NaN is number et il n'est pas nécessaire pour une comparaison stricte? C'est comme dans ce cas c'est juste une question de style, je pense.
  • selon votre entrée x==y est également faux
  • Il se pourrait que Flanagan qu'on préfère !== contrôles de plus de != contrôles. Autant que je sache, il n'y a pas d'autre valeur où x != x. Mais il y a deux groupes distincts les développeurs JavaScript: ceux qui préfèrent != et ceux qui préfèrent !==, que ce soit pour la vitesse, la précision, l'expressivité, etc.
  • Pour vérifier ce qui est de la comparaison de deux valus à partir du même type == ou != doit toujours retourner le même résultat que === et !==. Les problèmes apparaissent lorsque l'on compare les différents types.
  • Pourquoi utiliser lâche la comparaison lors de la comparaison stricte se comporte de la même manière?
  • NaN est l'unique type d'objet qui n'est pas égale à elle-même.
  • NaN n'est pas un type unique, c'est un nombre. C'est une valeur unique qui n'est pas égal à lui-même.
  • Le titre semble être tromper les gens. Je vous suggère de le changer pour quelque chose comme "Est x != x toujours différent de x !== x?"
  • == et === sont pas juste le style de préférence. Ils servent à des fins différentes pour ceux qui comprennent comment ils fonctionnent. Ilsne pas se comportent de la même, mais ont parfois les mêmes résultats. Ma réponse a donné plusieurs exemples de cas où elles sont différentes. David Flanagan est aussi mauvais pour l'aide soit == ou === pour NaN comparaison de toute façon. NaN est une valeur unique qui n'est pas égal à quoi que ce soit-y compris lui-même--de sorte que même lorsque x est NaN, x == NaN et x === NaN sera toujours faux. C'est pourquoi la négation semble se comporter de la même, il est toujours faux, sauf si vous utilisez isNaN().
  • Giorgi a dit "dans ce cas," c'est une affaire de style. Et il a raison. Il n'est pas le style quand les types des opérandes sont différents, mais il est de style quand ils sont les mêmes. Séparément: Flanagan est de faire ces comparaisons avec === avec NaN pour faire le point que NaN n'est pas égal à lui-même. Il n'est pas "mal", qu'il fait ça comme une tâche d'enseignement, ce qui démontre que ça ne fonctionne pas.
  • Je viens de tomber sur cet article après la lecture de votre question, le point n ° 4 adresses des opérateurs d'égalité et sont susceptibles de vous intéresser. À peu près la même que T. J. Crowder a été affirmant dans sa réponse: toptal.com/javascript/10-most-common-javascript-mistakes