JavaScript встроенный в IsNaN функции, это - как и следовало ожидать , по умолчанию - это «Динамический тип оператора». Поэтому все значения, которые (во время процесса DTC) могут дать простую истину | ложь, например "", " ", " 000"
, не может быть NaN.
Это означает, что переданный аргумент сначала будет преобразован, как в:
function isNaNDemo(arg){
var x = new Number(arg).valueOf();
return x != x;
}
Объяснение:
В верхней строке тела функции мы (сначала) пытаемся успешно преобразовать аргумент в числовой объект. И (второй), с помощью оператора точки мы - для собственного удобства - сразу вырежешь, на примитивное значение создаваемого объекта.
Во второй строке мы берем значение, полученное на предыдущем шаге, и преимущество того факта, что NaN не равен чему-либо во вселенной, даже самому себе, например: NaN == NaN >> false
чтобы окончательно сравнить его (для неравенства) с самим собой ,
Таким образом, функция return выдаст true только тогда и только тогда, когда предоставленный аргумент return является неудачной попыткой преобразования в числовой объект, т. Е. В число, не являющееся числом; например, NaN.
isNaNstatic ()
Однако для оператора статического типа - при необходимости и при необходимости - мы можем написать гораздо более простую функцию, такую как:
function isNaNstatic(x){
return x != x;
}
И вообще избегайте DTC, чтобы, если аргумент не был явным числом NaN, он вернул бы false. А потому тестирование на следующее:
isNaNStatic(" x"); // will return false
потому что это все еще строка.
Однако:
isNaNStatic(1/"x"); // will of course return true.
как будет, например isNaNStatic(NaN); >> true
.
Но вопреки тому isNaN
, isNaNStatic("NaN"); >> false
потому что это (аргумент) является обычной строкой.
PS: статическая версия isNaN может быть очень полезна в современных сценариях кодирования. И это вполне может быть одной из основных причин, почему я нашел время для публикации этого.
С уважением.