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

    @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. В комментариях ответить не могу, т.к. исчерпан суточный лимит.
    Ответ написан
    5 комментариев