|
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 |
ochen, Преобразование к числу
|
Если преобразовать строку в число использую унарный "+" или number(), то результатом является NaN. Т.е.функция isNaN("какая-нибудь строка") возвращает true, т.к. это не может быть приведену к числу. Почему же typeof говорит, что это число, если это NaN. Я не могу понять именно этот момент.
|
ochen,
потому что NaN относится к Number))) Это типа число, которое нифига не число. Или как в матанализе - неопределенность |
Как вообще можно это понять, если везде написано, что NaN это НЕ ЧИСЛО. Даже в описание number.NaN написано, что это не число. Т.е. typeof считает его числом, но нигде не написано, что это число? Или это где-то в очень сложных книгах?
|
ochen,
Умом Россию не понять. Почитай экму |
ochen, в этом есть некий смысл... все относительно... чем оно должно быть по твоему если это некий результат математической операции... относительно результата не число, относительно типа число... как и Infinity... бесконечность...
alert(typeof Infinity) |
Да, вот так уже более точно. Вероятно, я бы мог нагуглить ответ, если бы понимал, как меня обманывает NaN. Джуваскрипт стал более понятен. Спасибо.
|
А зачем нужен NaN? Мне кроме вреда эта шняга ничего не принесла. Покажите плес пользу.
|
warren buffet,
Если говорить о практике - он в основном нужен чтобы условия проверяющие результаты математических операции в случае ошибки оных всегда возвращали false. Это удобно во многих случаях: не приходится писать дополнительные проверки и лишнюю обработку ошибок. Но как и с любым подобным удобством, это усложняет отладку. Суть NaN в том, что он не равен ничему, даже самому себе.) alert(NaN === NaN) |
Часовой пояс GMT +3, время: 10:08. |
|