Получается, то сравнение
'hello' == '123'
это
parseInt('hello') == parseInt('123')
так?
Нет. Оба операнда строки и никакого приведения типов не будет.
И [] == {} аналогично parseInt([]) == parseInt({})?
Нет. Оба операнда объекты — приведения не будет.
https://262.ecma-international.org/10.0/#sec-abstr...
Строка преобразовывается в число когда вы сравниваете строку и число (пп. 4 и 5 из описания алгоритма выше).
Например
'hello' == 123
приведёт строку к числу
ToNumber('hello') == 123
и получится
NaN == 123
→ сравниваем два числа и получаем
false
.
Тут
ToNumber это такая специальная операция, можно считать что это то же самое что вызов функции
Number
.