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

Оператор "+", который выполняет сложение, в JavaScript может иметь два разных значения в зависимости от контекста использования. Если хотя бы одно из слагаемых является строкой, то оператор "+" выполняет конкатенацию, а не сложение чисел.

Теперь рассмотрим функцию isNaN(). Она возвращает true, если аргумент не является числом. При этом, если в переданном аргументе происходит неявное преобразование к числу, то функция isNaN() преобразует аргумент в число перед выполнением проверки.

Посмотрим на примере:

console.log(isNaN("")) // true

В данном случае функция isNaN() получает пустую строку в качестве аргумента. В соответствии с правилами JavaScript, пустая строка будет преобразована в число 0 перед выполнением проверки. В результате, функция isNaN() получает число 0 и возвращает false. Однако, в случае с пустой строкой, оператор "+" выполняет конкатенацию, а не сложение чисел. Поэтому функция isNaN() получает строку, которая не является числом, и возвращает true.

Таким образом, console.log(isNaN("")) выводит true, потому что пустая строка не может быть преобразована в число, и поэтому isNaN() вернет true.