Ответ 1
Основной целью Symbol.toPrimitive
является изменение порядка, в котором toString
и valueOf
вызываются в разных сценариях принуждения.
Примером этого является собственный объект Date
, где он по умолчанию преобразует значение в строку, а не число:
console.log(1 + new Date()); // "1Mon Aug 15 2016 13:25:31 GMT-0500 (EST)"
var a = new Date(1000);
console.log(a == 1000); // false
console.log(a == a.toString()); // true
Если вы не намереваетесь сделать это, , вы должны просто переопределить как obj.valueOf
, так и obj.toString
, чтобы соответствовать поведению, которое вы хотите - это то, что делают большинство из нативных объектов в JavaScript.
Обратите внимание, что как valueOf
, так и toString
должны быть переопределены, как абстрактная операция ToPrimitive может вызвать любой из них для принуждения в зависимости от причины, по которой вызывается ToPrimitive.