# 前言

在 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