|
Hедопонимание с typeof
Приветствую.
Объясните, пожалуйста, почему буква превращается в цифру, когда typeof? Я, вероятно, не понимаю многого, но тут совсем не понимаю. var str = 'd23'; console.log(isNaN( +str[0])); // true console.log(isNaN( str[0])); // true console.log(typeof str[0] == "number"); //false console.log(typeof +str[0] == "number"); //true |
Если преобразовать строку в число использую унарный "+" или number(), то результатом является NaN. Т.е.функция isNaN("какая-нибудь строка") возвращает true, т.к. это не может быть приведену к числу. Почему же typeof говорит, что это число, если это NaN. Я не могу понять именно этот момент.
|
ochen,
потому что NaN относится к Number))) Это типа число, которое нифига не число. Или как в матанализе - неопределенность |
Как вообще можно это понять, если везде написано, что NaN это НЕ ЧИСЛО. Даже в описание number.NaN написано, что это не число. Т.е. typeof считает его числом, но нигде не написано, что это число? Или это где-то в очень сложных книгах?
|
ochen,
Умом Россию не понять. Почитай экму |
Да, вот так уже более точно. Вероятно, я бы мог нагуглить ответ, если бы понимал, как меня обманывает NaN. Джуваскрипт стал более понятен. Спасибо.
|
А зачем нужен NaN? Мне кроме вреда эта шняга ничего не принесла. Покажите плес пользу.
|
warren buffet,
Если говорить о практике - он в основном нужен чтобы условия проверяющие результаты математических операции в случае ошибки оных всегда возвращали false. Это удобно во многих случаях: не приходится писать дополнительные проверки и лишнюю обработку ошибок. Но как и с любым подобным удобством, это усложняет отладку. Суть NaN в том, что он не равен ничему, даже самому себе.) alert(NaN === NaN) |
Как в математических операциях может возникнуть NaN?
ЗЫ По-моему это академизм. |
warren buffet,
Например точно также как в вашем случае: неподходящие входные данные. var str = 'd23'; var num = +str + 5; if(num > 5) ... //false if(num == 5) ... //false if(num < 5) ... //false return ...И никаких лишних проверок и заморочек. Не число? Ну и хрен с ним. Прошляпить некорректные данные тоже легко, но что тут поделаешь. |
Часовой пояс GMT +3, время: 04:19. |
|