Функция JavaScript isNaN является, как и следовало ожидать по умолчанию, «оператором динамического типа».
Поэтому все значения, которые (во время процесса DTC) могут дать простую истину | false, например "", " ", " 000"
, не может быть NaN.
Это означает, что указанный аргумент сначала будет подвергнут преобразованию , как в:
function isNaNDemo(arg){
var x = new Number(arg).valueOf();
return x != x;
}
Пояснение:
В верхней строке тела функции мы (сначала) пытаемся успешно преобразовать аргумент в числовой объект. И (во-вторых), используя оператор точки, мы - для нашего собственного удобства - немедленно удаляем примитив значение созданного объекта.
Во второй строке мы берем значение, полученное на предыдущем шаге, и преимущество того факта, что NaN не равно ничему во вселенной, даже например, NaN == NaN >> false
чтобы окончательно сравнить его (для неравенства) с самим собой.
Таким образом, функция return выдаст true только тогда и только тогда, когда предоставленный аргумент-возврат является неудачной попыткой преобразования в числовой объект, т. Е. не числовой номер; например, 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
, потому что это (аргумент) обычная строка.
p.s .:
Статическая версия isNaN может быть очень полезна в современных сценариях кодирования. И это вполне может быть одной из главных причин, почему я нашел время для публикации этого.
Привет.