NaN в JavaScript означает «не число», хотя на самом деле его тип - число.
typeof(NaN) // "number"
Чтобы проверить, имеет ли переменная значение NaN, мы не можем просто использовать функцию isNaN (), потому что isNaN () имеет следующую проблему, см. Ниже:
var myVar = "A";
isNaN(myVar) // true, although "A" is not really of value NaN
Что действительно происходит здесь, так это то, что myVar неявно приводится к числу:
var myVar = "A";
isNaN(Number(myVar)) // true. Number(myVar) is NaN here in fact
Это действительно имеет смысл, потому что «А» на самом деле не число. Но мы действительно хотим проверить, имеет ли myVar значение NaN.
Так что isNaN () не может помочь. Тогда что мы должны делать вместо этого?
В свете того, что NaN является единственным значением JavaScript, которое обрабатывается неравномерно для самого себя, поэтому мы можем проверить его равенство самому себе, используя! ==
var myVar; // undefined
myVar !== myVar // false
var myVar = "A";
myVar !== myVar // false
var myVar = NaN
myVar !== myVar // true
Итак, чтобы сделать вывод , если верно, что переменная! == сама по себе, то эта переменная в точности имеет значение NaN:
function isOfValueNaN(v) {
return v !== v;
}
var myVar = "A";
isNaN(myVar); // true
isOfValueNaN(myVar); // false