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

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,
Умом Россию не понять. Почитай экму

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)

warren buffet 22.09.2016 08:52

Как в математических операциях может возникнуть NaN?

ЗЫ По-моему это академизм.

Aetae 23.09.2016 06:27

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.