Ivanushka255, a = +a;
Вот тут движок сначала проверит существование метода [Symbol.toPrimitive]. У объекта a нет такого метода.
Тогда движок смотрит что hint=number и будет искать метод valueOf. Такой метод есть, но он возвращает сам объект, поэтому движок проигнорирует результат и перейдёт к toString. toString вернёт строку "[object Object]"
Поскольку это всё ещё не число (но уже примитивное значение), то к нему применится преобразование строки в число и получится NaN
Он есть у Object, но как я уже писал выше, для объектов он возвращает их же и для целей получения примитивного типа бесполезен.
https://tc39.es/ecma262/multipage/fundamental-obje...