数据类型转换分为强制数据类型转换(显式转换)和自动转换(隐式转换)
(1)强制转换
主要是使用Number、String和Boolean三个构造函数,手动将各种类型的值,转换成数字、字符串或者布尔值。
Number()
// 数值:转换后还是原来的值
Number(324) // 324
// 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324
// 布尔值:true 转成1,false 转成0
Number(true) // 1
Number(false) // 0
String()
String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"
转换对象和数组
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
Boolean()
除了以下六个值的转换结果为false,其他的值全部为true。
undefined
null
-0
0或+0
NaN
''(空字符串)
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
(2)自动转换
遇到以下三种情况时,JavaScript会自动转换数据类型,即转换是自动完成的,对用户不可见。
// 1. 不同类型的数据互相运算
123 + 'abc' // "123abc"
// 2. 对非布尔值类型的数据求布尔值
if ('abc') {
console.log('hello')
} // "hello"
// 3. 对非数值类型的数据使用一元运算符(即“+”和“-”)
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN