UNPKG

foop

Version:

interfaces that describe their intentions.

89 lines (84 loc) 5.32 kB
// const isBoolean = require('../is/boolean') // const isObj = require('../is/objNotNull') // const isArray = require('../is/array') // const isNumberish = require('../is/numberish') // const SymbolPrimitive = require('../symbols/primitive') // const hasOwnProperty = require('../util/hasOwnProperty') /** * @since 5.0.0-beta.6 * @memberOf cast * * @name toNumber * @alias toNum * @aka ToNumber * * @param {*} x number to cast to primitive number * @return {number} +x * * {@link http://2ality.com/2012/04/number-encoding.html number-encoding-js} * {@link http://speakingjs.com/es5/ch11.html speaking-js-numbers} * {@link https://coderwall.com/p/5tlhmw/converting-strings-to-number-in-javascript-pitfalls coderwal-to-number} * {@link http://ecma-international.org/ecma-262/7.0/#sec-tonumber emca-to-number} * @see {@link emca-to-number} * @see {@link coderwal-to-number} * @see {@link speaking-js-numbers} * @see {@link number-encoding-js} * * @TODO make this `toNumberPrimitive` while others could convert as codes * * * @example * * toNumber('') * //=> 0 * toNumber(' ') * //=> 0 * toNumber('eh') * //=> NaN * toNumber('1') * //=> 1 * toNumber(null) * //=> 0 * toNumber(true) * //=> 1 * toNumber(false) * //=> 0 * toNumber('00') * //=> 0 * toNumber(undefined) * //=> NaN * toNumber({}) * //=> NaN * toNumber([]) * //=> 0 * toNumber([100, 200]) * //=> NaN * * @example * * var eh = {Symbol.toPrimitive: hint => hint === 'number' ? 100 : 'eh'} * toNumber(eh) * //=> 100 * */ function toNumber(x) { // @NOTE // if (isNumberish(x) || isBoolean(x)) { // return +x // } // else if (isObj(x)) { // if (hasOwnProperty(x, SymbolPrimitive)) return x[SymbolPrimitive]('number') // else if (isArray(x)) return +x // // this keeps it consistent with array? // else return 0 // } return +x // @TODO // +x || 0 // // , coerceNaN = true // const number = +x // return isNotEhNumber(x) ? 0 : x } module.exports = toNumber //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9OdW1iZXIuanMiLCJzb3VyY2VzIjpbInRvTnVtYmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGNvbnN0IGlzQm9vbGVhbiA9IHJlcXVpcmUoJy4uL2lzL2Jvb2xlYW4nKVxuLy8gY29uc3QgaXNPYmogPSByZXF1aXJlKCcuLi9pcy9vYmpOb3ROdWxsJylcbi8vIGNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG4vLyBjb25zdCBpc051bWJlcmlzaCA9IHJlcXVpcmUoJy4uL2lzL251bWJlcmlzaCcpXG4vLyBjb25zdCBTeW1ib2xQcmltaXRpdmUgPSByZXF1aXJlKCcuLi9zeW1ib2xzL3ByaW1pdGl2ZScpXG4vLyBjb25zdCBoYXNPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL3V0aWwvaGFzT3duUHJvcGVydHknKVxuXG4vKipcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjZcbiAqIEBtZW1iZXJPZiBjYXN0XG4gKlxuICogQG5hbWUgdG9OdW1iZXJcbiAqIEBhbGlhcyB0b051bVxuICogQGFrYSBUb051bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0geCBudW1iZXIgdG8gY2FzdCB0byBwcmltaXRpdmUgbnVtYmVyXG4gKiBAcmV0dXJuIHtudW1iZXJ9ICt4XG4gKlxuICoge0BsaW5rIGh0dHA6Ly8yYWxpdHkuY29tLzIwMTIvMDQvbnVtYmVyLWVuY29kaW5nLmh0bWwgbnVtYmVyLWVuY29kaW5nLWpzfVxuICoge0BsaW5rIGh0dHA6Ly9zcGVha2luZ2pzLmNvbS9lczUvY2gxMS5odG1sIHNwZWFraW5nLWpzLW51bWJlcnN9XG4gKiB7QGxpbmsgIGh0dHBzOi8vY29kZXJ3YWxsLmNvbS9wLzV0bGhtdy9jb252ZXJ0aW5nLXN0cmluZ3MtdG8tbnVtYmVyLWluLWphdmFzY3JpcHQtcGl0ZmFsbHMgY29kZXJ3YWwtdG8tbnVtYmVyfVxuICoge0BsaW5rIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbnVtYmVyIGVtY2EtdG8tbnVtYmVyfVxuICogQHNlZSB7QGxpbmsgZW1jYS10by1udW1iZXJ9XG4gKiBAc2VlIHtAbGluayBjb2RlcndhbC10by1udW1iZXJ9XG4gKiBAc2VlIHtAbGluayBzcGVha2luZy1qcy1udW1iZXJzfVxuICogQHNlZSB7QGxpbmsgbnVtYmVyLWVuY29kaW5nLWpzfVxuICpcbiAqIEBUT0RPIG1ha2UgdGhpcyBgdG9OdW1iZXJQcmltaXRpdmVgIHdoaWxlIG90aGVycyBjb3VsZCBjb252ZXJ0IGFzIGNvZGVzXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogIHRvTnVtYmVyKCcnKVxuICogIC8vPT4gMFxuICogIHRvTnVtYmVyKCcgICAnKVxuICogIC8vPT4gMFxuICogIHRvTnVtYmVyKCdlaCcpXG4gKiAgLy89PiBOYU5cbiAqICB0b051bWJlcignMScpXG4gKiAgLy89PiAxXG4gKiAgdG9OdW1iZXIobnVsbClcbiAqICAvLz0+IDBcbiAqICB0b051bWJlcih0cnVlKVxuICogIC8vPT4gMVxuICogIHRvTnVtYmVyKGZhbHNlKVxuICogIC8vPT4gMFxuICogIHRvTnVtYmVyKCcwMCcpXG4gKiAgLy89PiAwXG4gKiAgdG9OdW1iZXIodW5kZWZpbmVkKVxuICogIC8vPT4gTmFOXG4gKiAgdG9OdW1iZXIoe30pXG4gKiAgLy89PiBOYU5cbiAqICB0b051bWJlcihbXSlcbiAqICAvLz0+IDBcbiAqICB0b051bWJlcihbMTAwLCAyMDBdKVxuICogIC8vPT4gTmFOXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgdmFyIGVoID0ge1N5bWJvbC50b1ByaW1pdGl2ZTogaGludCA9PiBoaW50ID09PSAnbnVtYmVyJyA/IDEwMCA6ICdlaCd9XG4gKiAgdG9OdW1iZXIoZWgpXG4gKiAgLy89PiAxMDBcbiAqXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHgpIHtcbiAgLy8gQE5PVEVcbiAgLy8gaWYgKGlzTnVtYmVyaXNoKHgpIHx8IGlzQm9vbGVhbih4KSkge1xuICAvLyAgIHJldHVybiAreFxuICAvLyB9XG4gIC8vIGVsc2UgaWYgKGlzT2JqKHgpKSB7XG4gIC8vICAgaWYgKGhhc093blByb3BlcnR5KHgsIFN5bWJvbFByaW1pdGl2ZSkpIHJldHVybiB4W1N5bWJvbFByaW1pdGl2ZV0oJ251bWJlcicpXG4gIC8vICAgZWxzZSBpZiAoaXNBcnJheSh4KSkgcmV0dXJuICt4XG4gIC8vICAgLy8gdGhpcyBrZWVwcyBpdCBjb25zaXN0ZW50IHdpdGggYXJyYXk/XG4gIC8vICAgZWxzZSByZXR1cm4gMFxuICAvLyB9XG5cbiAgcmV0dXJuICt4XG5cbiAgLy8gQFRPRE9cbiAgLy8gK3ggfHwgMFxuICAvL1xuICAvLyAsIGNvZXJjZU5hTiA9IHRydWVcbiAgLy8gY29uc3QgbnVtYmVyID0gK3hcbiAgLy8gcmV0dXJuIGlzTm90RWhOdW1iZXIoeCkgPyAwIDogeFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvTnVtYmVyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnRUEsU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFOzs7Ozs7Ozs7Ozs7RUFZbkIsT0FBTyxDQUFDLENBQUM7Ozs7Ozs7O0NBUVY7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxRQUFROyJ9