to-primitive.js 872 B

12345678910111213141516171819202122
  1. var isObject = require('../internals/is-object');
  2. var isSymbol = require('../internals/is-symbol');
  3. var ordinaryToPrimitive = require('../internals/ordinary-to-primitive');
  4. var wellKnownSymbol = require('../internals/well-known-symbol');
  5. var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
  6. // `ToPrimitive` abstract operation
  7. // https://tc39.es/ecma262/#sec-toprimitive
  8. module.exports = function (input, pref) {
  9. if (!isObject(input) || isSymbol(input)) return input;
  10. var exoticToPrim = input[TO_PRIMITIVE];
  11. var result;
  12. if (exoticToPrim !== undefined) {
  13. if (pref === undefined) pref = 'default';
  14. result = exoticToPrim.call(input, pref);
  15. if (!isObject(result) || isSymbol(result)) return result;
  16. throw TypeError("Can't convert object to primitive value");
  17. }
  18. if (pref === undefined) pref = 'number';
  19. return ordinaryToPrimitive(input, pref);
  20. };