Qu'est ce que 'v! == v' expression check?

J'ai vu cela dans les sources d'une lib, et confus. Je pense, il évalue toujours à « false ». Quelle est la signification de l'utilisation de cela?

Il vérifie si v est NaN :

 if( v !== v ){ //'v' is NaN here } 

De la norme :

Un moyen fiable pour le code ECMAScript pour tester si une valeur X est un NaN est une expression de la forme X! == X. Le résultat sera vrai si et seulement si X est un NaN.

Pourquoi ne pas utiliser simplement isNaN() ?

La réponse est simple: " isNaN() n'est pas assez fiable ". Voici les cas, quand isNaN() sera échoué:

 isNaN("NaN") //true isNaN(undefined) //true 

Il teste "Not A Number": NaN !== NaN équivaut à true

De MDN :

La valeur initiale de NaN est Not-A-Number – la même que la valeur de Number.NaN. Dans les navigateurs modernes, NaN est une propriété non configurable et non accessible à l'écriture. Même si ce n'est pas le cas, évitez de l'annuler.

Il est plutôt rare d'utiliser NaN dans un programme. C'est la valeur retournée lorsque les fonctions Math échouent (Math.sqrt(-1)) ou lorsqu'une fonction essayant d'analyser un nombre échoue (parseInt("blabla")) .