共计 1371 个字符,预计需要花费 4 分钟才能阅读完成。
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
正文完
发表至: javascript
2022-07-12