Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Hедопонимание с typeof (https://javascript.ru/forum/misc/65024-hedoponimanie-s-typeof.html)

ochen 20.09.2016 18:26

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

Rise 20.09.2016 19:09

ochen, Преобразование к числу

ochen 20.09.2016 23:17

Если преобразовать строку в число использую унарный "+" или number(), то результатом является NaN. Т.е.функция isNaN("какая-нибудь строка") возвращает true, т.к. это не может быть приведену к числу. Почему же typeof говорит, что это число, если это NaN. Я не могу понять именно этот момент.

Coriolan161 20.09.2016 23:22

ochen,
потому что NaN относится к Number))) Это типа число, которое нифига не число. Или как в матанализе - неопределенность

ochen 20.09.2016 23:26

Как вообще можно это понять, если везде написано, что NaN это НЕ ЧИСЛО. Даже в описание number.NaN написано, что это не число. Т.е. typeof считает его числом, но нигде не написано, что это число? Или это где-то в очень сложных книгах?

Coriolan161 20.09.2016 23:43

ochen,
Умом Россию не понять. Почитай экму

Rise 20.09.2016 23:54

ochen, в этом есть некий смысл... все относительно... чем оно должно быть по твоему если это некий результат математической операции... относительно результата не число, относительно типа число... как и Infinity... бесконечность...
alert(typeof Infinity)

ochen 20.09.2016 23:58

Да, вот так уже более точно. Вероятно, я бы мог нагуглить ответ, если бы понимал, как меня обманывает NaN. Джуваскрипт стал более понятен. Спасибо.

warren buffet 21.09.2016 22:36

А зачем нужен NaN? Мне кроме вреда эта шняга ничего не принесла. Покажите плес пользу.

Aetae 21.09.2016 23:34

warren buffet,
Если говорить о практике - он в основном нужен чтобы условия проверяющие результаты математических операции в случае ошибки оных всегда возвращали false. Это удобно во многих случаях: не приходится писать дополнительные проверки и лишнюю обработку ошибок. Но как и с любым подобным удобством, это усложняет отладку.

Суть NaN в том, что он не равен ничему, даже самому себе.)
alert(NaN === NaN)


Часовой пояс GMT +3, время: 10:08.