| var isObject = require('../internals/is-object'); |
| |
| // `ToPrimitive` abstract operation |
| // https://tc39.github.io/ecma262/#sec-toprimitive |
| // instead of the ES6 spec version, we didn't implement @@toPrimitive case |
| // and the second argument - flag - preferred type is a string |
| module.exports = function (input, PREFERRED_STRING) { |
| if (!isObject(input)) return input; |
| var fn, val; |
| if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; |
| if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; |
| if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; |
| throw TypeError("Can't convert object to primitive value"); |
| }; |