# 前言
在 JavaScript 中,有一部分内容,情况复杂,容易出错,饱受争议但有应用广泛,那就是类型转换。
在 ES6 前,JS 一共有六种数据类型:Undefined、Null、Boolean、Number、String、Object
# 原始值转布尔值
在 JavaScript 中,只有 6 种值可以被转成 false,其余的都转成 true
Boolean() // false
!!false // false
!!undefined // false
!!null // false
!!+0 // false
!!-0 // false
!!NaN // false
!!'' // false
# 原始值转数字
在 JavaScript 中,使用 Number 可以将类型转换成数字,如果无法转换,则返回 NaN
参数类型 | 结果 |
---|---|
Undefined | NaN |
Null | +0 |
Boolean | 如果参数是 true,则返回1;否则返回 +0 |
String | 比较复杂,看例子 |
Number() // +0
+undefined // NaN
+null // +0
+false // +0
+true // 1
+'123' // 123
+'-123' // -123
+'1.2' // 1.2
+'000123' // 123
+'-000123' // -123
+'0x11' // 17
+'' // 0
+' ' // 0
+'123 123' // NaN
+'foo' // NaN
+'100a' // NaN
# 原始值转字符串
参数类型 | 结果 |
---|---|
Undefined | "undefined" |
Null | "Null" |
Boolean | "true" | "false" |
Number | 看例子 |
String | 不变 |
String() // ''
undefined + '' // 'undefined'
null + '' // 'null'
false + '' // 'false'
true + '' // 'true'
0 + '' // 0
-0 + '' // 0
NaN + '' // 'NaN'
Infinity + '' // 'Infinity'
-Infinity + '' // -Infinity
1 + '' // '1'
# 原始值转对象
new 一下就可以了
# 对象转布尔值
所有对象转成布尔值都转换成 true
# 对象转字符串
会输出一堆奇怪的东西
# 对象转数字
除了日期输出毫秒数意外,其余的都输出 NaN