关于JavaScript中if(xx)和 a==b的判断
if(xx)的判断
if语句是编程语言最常用的语句,语法
if(condition){
//true statement
}else {
//false statement
}
其中condition可以是任意表达式,结果不一定是布尔值,JavaScript解释器会自动调用Boolean()将表达式结果转为布尔值,如果表达式为真执行第一个代码块内语句,如果为假执行第二个代码块内语句。
比如:
可以看到空字符串和空格字符串的输出结果是不一致的,说明空字符串是false,空格字符串是true。
如何判断JavaScript对类型转换的结果是true还是false?
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
==的判断
1.如果两个值类型相同,则执行严格相等的运算
2.如果两个值的类型不同
(1)如果一个是null,一个是undefined,那么相等
(2)如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
(3)如果一个值是true/false则将其转为1/0比较
(4)如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
(5)其它就不相等了
我们用一个表来直观的感受一下当类型不同的时候,我们判断的结果
x | y | 结果 |
---|---|---|
null | undefined | true |
Number | String | x == toNumber(y) |
Boolean | (any) | toNumber(x) == y |
Object | String or Number | toPrimitive(x) == y |
otherwise | otherwise | false |
这里就牵涉出一个问题,怎么知道toNumber和toPrimitive的结果呢,下面就是关于JavaScript对==的类型转换
toNumber
type | Result |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果
以上就是我对这两种判断方式的知识整理,希望能够帮助到需要的人。