Задать вопрос
@NickUser

Почему console.log(isNaN( )) выводит true, если под капотом пустая строка преобразовывается к 0?

тип Number( ) равно 0. Это странности самого JS или я чет не понимаю?
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@pddev
Потому что isNaN() то же самое, что isNaN(undefined)
Если ты не передаёшь в функцию параметр, то он будет считаться неопределённым (т.е. undefined).
Number() без параметров по-умолчанию возвращает 0. А вот Number(undefined) уже NaN.

В Javascript есть некоторые особенности при сравнении элементарных типов
"" === 0 ---> false
"" == 0 ---> true
" " == 0 ---> true
"0" == 0 ---> true
isNaN("") ---> false
isNaN("0") ---> false
isNaN(0) ---> false
isNaN(123) ---> false
isNaN("123") ---> false
isNaN("abc") ---> true
undefined == "" ---> false
undefined == 0 ---> false
isNaN(undefined) ---> true
isNaN() ---> true

Кстати, поэтому нужно быть максимально осторожным при проверке значений переменных в if или в выражениях. И лучше использовать === вместо ==, и не полагаться на преобразование значений по-умолчанию.

P.S. В комментариях ответить не могу, т.к. исчерпан суточный лимит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы