JavaScript 的类型转换
在JS 里面有一些运算符例如typeof 可以操作任意的数据类型,并返回特定类型的值。但是,如像算术运算符“+”、"*",比较运算符“==”等,会根据情况对操作数进行类型转换以符合自己的规则。
算术运算符“+”的类型转换
- 在两个操作数都是数字的时候,会做加法运算
- 两个参数都是字符串或在有一个参数是字符串的情况下会把另外一个参数转换为字符串做字符串拼接
- 在参数有对象的情况下会调用其valueOf或toString
- 在只有一个字符串参数的时候会尝试将其转换为数字
- 在只有一个数字参数的时候返回其正数值
console.log(2+4);//6
console.log("2"+"4");//"24"
console.log(2+"4");//"24"
console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"
console.log(+"4");//4
null + 1 // 1
undefined + 1 // NaN
算术运算符“-” “/‘’ ‘’*‘’
自动转化了为数字
'5' - '2' // 3
'5' * '2' // 10
true - 1 // 0
false - 1 // -1
'1' - 1 // 0
'5' * [] // 0
false / '5' // 0
'abc' - 1 // NaN
注意
+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0
比较运算符 “==” 判断的类型转换
1. 如果两个值类型相同,则执行严格相等的运算
2. 如果两个值的类型不同会有如下情况
- 如果一个是null,一个是undefined,那么相等
- 如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
- 如果一个值是true/false则将其转为1/0比较
- 如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
- 其它就不相等了
转化为数值的规则
类型 | 结果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
注意:
NaN === NaN // false
undefined == null //true
!" " == false //true
"00" == false //true
"0.00" == false //true
if ()的条件部分,会将非布尔值的参数自动转换为布尔值。
转化规则
类型 | 布尔值 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
注意:
if (" ") {
console.log('blank')
// blank
}
这是带有空格的字符串非空字符串,所以if(" ")判断为ture。