isNaN() - функция для проверки значения на NaN. Если переданное значение не может быть преобразовано в число, то функция возвращает true, иначе - false.
Если в функцию не передается параметр, то по умолчанию он считается неопределенным, то есть undefined. Поэтому isNaN() вернет true.
Функция Number() без параметров возвращает 0. А если передать undefined в Number(), то будет возвращено NaN.
В JavaScript есть некоторые особенности при сравнении различных типов данных:
"" === 0 - в данном случае сравнение вернет false, так как пустая строка и число 0 разные типы данных.
"" == 0 - в данном случае сравнение вернет true, так как происходит преобразование типов данных путем приведения пустой строки к числу.
" " == 0 - в данном случае сравнение вернет true, так как пробелы также считаются пробельными символами и будут преобразованы к числу 0.
"0" == 0 - в данном случае сравнение вернет true, так как происходит преобразование строки "0" к числу 0.
isNaN("") - вернет false, так как пустая строка может быть преобразована в число 0.
isNaN("0") - вернет false, так как строка "0" может быть преобразована в число 0.
isNaN(0) - вернет false, так как число 0 не является NaN.
isNaN(123) - вернет false, так как число 123 не является NaN.
isNaN("123") - вернет false, так как строка "123" может быть преобразована в число 123.
isNaN("abc") - вернет true, так как строка "abc" не может быть преобразована в число.
undefined == "" - вернет false, так как undefined и пустая строка разные типы данных.
undefined == 0 - вернет false, так как undefined и число 0 разные типы данных.
isNaN(undefined) - вернет true, так как undefined не может быть преобразовано в число.
isNaN() - вернет true, так как вызов функции без параметров вернет NaN.
Важно быть осторожным при проверке значений переменных в условных конструкциях. Лучше использовать строгое сравнение === вместо ==, чтобы избежать автоматического приведения типов данных.