Alex,
попробуйте выяснить эти весомые причины. Вангую что их нет (во всяком случае даже в замшелых госучреждениях я не видел таких бредовых требований)
Ivanushka255, a = +a;
Вот тут движок сначала проверит существование метода [Symbol.toPrimitive]. У объекта a нет такого метода.
Тогда движок смотрит что hint=number и будет искать метод valueOf. Такой метод есть, но он возвращает сам объект, поэтому движок проигнорирует результат и перейдёт к toString. toString вернёт строку "[object Object]"
Поскольку это всё ещё не число (но уже примитивное значение), то к нему применится преобразование строки в число и получится NaN