![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
20.09.2016, 18:26
|
Новичок на форуме
|
|
Регистрация: 20.09.2016
Сообщений: 4
|
|
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
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
20.09.2016, 23:17
|
Новичок на форуме
|
|
Регистрация: 20.09.2016
Сообщений: 4
|
|
Если преобразовать строку в число использую унарный "+" или number(), то результатом является NaN. Т.е.функция isNaN("какая-нибудь строка") возвращает true, т.к. это не может быть приведену к числу. Почему же typeof говорит, что это число, если это NaN. Я не могу понять именно этот момент.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
20.09.2016, 23:22
|
![Аватар для Coriolan161](https://javascript.ru/forum/image.php?u=44881&dateline=1451122915) |
Профессор
|
|
Регистрация: 21.11.2015
Сообщений: 440
|
|
ochen,
потому что NaN относится к Number))) Это типа число, которое нифига не число. Или как в матанализе - неопределенность
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
20.09.2016, 23:26
|
Новичок на форуме
|
|
Регистрация: 20.09.2016
Сообщений: 4
|
|
Как вообще можно это понять, если везде написано, что NaN это НЕ ЧИСЛО. Даже в описание number.NaN написано, что это не число. Т.е. typeof считает его числом, но нигде не написано, что это число? Или это где-то в очень сложных книгах?
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
20.09.2016, 23:43
|
![Аватар для Coriolan161](https://javascript.ru/forum/image.php?u=44881&dateline=1451122915) |
Профессор
|
|
Регистрация: 21.11.2015
Сообщений: 440
|
|
ochen,
Умом Россию не понять. Почитай экму
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
20.09.2016, 23:58
|
Новичок на форуме
|
|
Регистрация: 20.09.2016
Сообщений: 4
|
|
Да, вот так уже более точно. Вероятно, я бы мог нагуглить ответ, если бы понимал, как меня обманывает NaN. Джуваскрипт стал более понятен. Спасибо.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
21.09.2016, 22:36
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
А зачем нужен NaN? Мне кроме вреда эта шняга ничего не принесла. Покажите плес пользу.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
21.09.2016, 23:34
|
![Аватар для Aetae](https://javascript.ru/forum/image.php?u=4993&dateline=1299014303) |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
warren buffet,
Если говорить о практике - он в основном нужен чтобы условия проверяющие результаты математических операции в случае ошибки оных всегда возвращали false. Это удобно во многих случаях: не приходится писать дополнительные проверки и лишнюю обработку ошибок. Но как и с любым подобным удобством, это усложняет отладку.
Суть NaN в том, что он не равен ничему, даже самому себе.)
alert(NaN === NaN)
__________________
29375, 35
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
22.09.2016, 08:52
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Как в математических операциях может возникнуть NaN?
ЗЫ По-моему это академизм.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
23.09.2016, 06:27
|
![Аватар для Aetae](https://javascript.ru/forum/image.php?u=4993&dateline=1299014303) |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
warren buffet,
Например точно также как в вашем случае: неподходящие входные данные.
var str = 'd23';
var num = +str + 5;
if(num > 5) ... //false
if(num == 5) ... //false
if(num < 5) ... //false
return ...
И никаких лишних проверок и заморочек. Не число? Ну и хрен с ним.
Прошляпить некорректные данные тоже легко, но что тут поделаешь.
__________________
29375, 35
Последний раз редактировалось Aetae, 23.09.2016 в 06:30.
|
|
|
|