foop
Version:
interfaces that describe their intentions.
89 lines (84 loc) • 5.32 kB
JavaScript
// 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