乐趣区

关于javascript:JS使用Number转换数据类型

Number()是 js 中的内置办法,用于将其余类型转换为数字类型。

上面依照数据类型的划分,来看看转换的后果。

根本类型

  • String

如果字符串中蕴含非有效数字字符,则后果为 NaN。

只有都是有效数字字符,能力转换为具体的数字。

如果是空字符串,则后果为 0。

代码如下:

Number('123') // => 123
Number('1.23') // => 1.23
Number('123px') // => NaN
Number('1.2.3') // => NaN
Number('') // => 0
  • Boolean

true 转换为 1,false 转换为 0。

代码如下:

Number(true) // => 1
Number(false) // => 0
  • null

转换后果为 0。

代码如下:

Number(null) // => 0
  • undefined

转换后果为 NaN。

代码如下:

Number(undefined) // => NaN
  • Symbol

不能转换,会报错。

代码如下:

Number(Symbol(1)) // => TypeError: can't convert symbol to number

援用类型

援用类型的转换机制是:如果执行 Number(a),那么被转换对象 a 先调用toString() 办法,获取到后果 b,而后再执行Number(b)

具体操作如下:

  • Object
  1. 一般对象

一般对象执行 toString()办法后的后果为“[object Object]”,因而后果为 NaN。

代码如下:

Number({a: 1}) // => NaN
  1. 数组对象

如果是空数组,则后果为 0。

如果是一个以上元素,则后果为 NaN。

如果只有一个元素,会有多种后果。

代码如下:

// 空数组
Number([]) // => 0

// 多个元素
Number(['1', '2']) // => NaN
Number([true, '2']) // => NaN

// 一个元素

// String
Number(['1']) // => 1
Number(['12.2']) // => 12.2
Number(['12.2px']) // => NaN
Number(['12.2.3']) // => NaN

// Boolean
Number([true]) // => NaN
Number([false]) // => NaN

// null
Number([null]) // => 0

// undefined
Number([undefined]) // => 0


// Symbol
Number([Symbol(1)]) // => TypeError: can't convert symbol to number
  1. 日期对象

转换时会调用日期对象的 valueOf() 办法取得毫秒数,再对此毫秒数转换。

代码如下:

Number(new Date()) // => 1657613985284 
Number(new Date('2011-03-05')) // => 1299283200000
  1. 正则对象

正则对象调用 toString() 办法后,会带有非有效数字字符,因而转换后果为 NaN。

代码如下:

Number(new RegExp()) // => NaN
  1. Math 对象

转换后果为对应的数字。

代码如下:

Number(Math.floor(1.23)) // => 1
  • Function

函数对象调用 toString() 办法后,会带有非有效数字字符,因而转换后果为 NaN。

代码如下:

Number(function () {}) // => NaN
退出移动版