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
- 普通对象
普通对象执行toString()方法后的结果为“[object Object]”,因此结果为NaN。
代码如下:
Number({a: 1}) // => NaN
- 数组对象
如果是空数组,则结果为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
- 日期对象
转换时会调用日期对象的valueOf()
方法获得毫秒数,再对此毫秒数转换。
代码如下:
Number(new Date()) // => 1657613985284
Number(new Date('2011-03-05')) // => 1299283200000
- 正则对象
正则对象调用toString()
方法后,会带有非有效数字字符,因此转换结果为NaN。
代码如下:
Number(new RegExp()) // => NaN
- Math对象
转换结果为对应的数字。
代码如下:
Number(Math.floor(1.23)) // => 1
- Function
函数对象调用toString()
方法后,会带有非有效数字字符,因此转换结果为NaN。
代码如下:
Number(function () {}) // => NaN
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。