es5.js 1003 B

12345678910111213141516171819202122232425262728293031323334353637
  1. 'use strict';
  2. var toStr = Object.prototype.toString;
  3. var isPrimitive = require('./helpers/isPrimitive');
  4. var isCallable = require('is-callable');
  5. // https://es5.github.io/#x8.12
  6. var ES5internalSlots = {
  7. '[[DefaultValue]]': function (O, hint) {
  8. var actualHint = hint || (toStr.call(O) === '[object Date]' ? String : Number);
  9. if (actualHint === String || actualHint === Number) {
  10. var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
  11. var value, i;
  12. for (i = 0; i < methods.length; ++i) {
  13. if (isCallable(O[methods[i]])) {
  14. value = O[methods[i]]();
  15. if (isPrimitive(value)) {
  16. return value;
  17. }
  18. }
  19. }
  20. throw new TypeError('No default value');
  21. }
  22. throw new TypeError('invalid [[DefaultValue]] hint supplied');
  23. }
  24. };
  25. // https://es5.github.io/#x9
  26. module.exports = function ToPrimitive(input, PreferredType) {
  27. if (isPrimitive(input)) {
  28. return input;
  29. }
  30. return ES5internalSlots['[[DefaultValue]]'](input, PreferredType);
  31. };