Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / exotic   js

Repository URL to install this package:

Version: 2.0.8 

/ src / types / primitive / number / cast / toNumber.ts

/**
 * @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: any): number {
  // @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 || 0

  // @TODO
  // +x || 0
  //
  // , coerceNaN = true
  // const number = +x
  // return isNotEhNumber(x) ? 0 : x
}

export { toNumber }
export default toNumber