一、if(xx)的判断
对于if括号里的表达式,会被强制转换为布尔类型
类型 | 结果 |
---|---|
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Undefined | false |
Null | false |
Object | true |
- 当if括号里面的表达式为Boolean时,直接判断
if (true){
console.log("true"); //true
}
- 当if括号里面的表达式为Number时,分两种情况,当number为+0,-0,NaN的时候,为false;其他为true。
if (+0){
console.log("haha"); //false
}
if (NaN){
console.log("haha"); //false
}
if (1){
console.log("haha"); //haha
}
- 当if括号里面的表达式为String时,空字符串为false,其他为true;
if ("") {
console.log('empty'); //false
}
if (" ") {
console.log('blank'); //blank
}
if('0.00'){
console.log('0.00'); //0.00
}
- 当if括号里面的表达式为Undefined时,为false;
if(Undefined){
console.log("true"); //false
}
- 当if括号里面的表达式为null时,为false;
if(null){
console.log("true"); //false
}
- 当if括号里面的表达式为Object时,为true;
if ([0]) {
console.log('array'); //array
}
二、a==b的判断
在javascript判断两个变量值是否相等,可以使用==操作符 或者===操作符
- ===是严格意义的相等,首先要求类型一样,然后在进行判断是否相等,如果两个类型不一样,直接返回false;在比较过程中不执行类型转换,需注意NaN和NaN不等。
- ==是抽象意义上的相等,相同类型直接比较,如果为不同类型,会对比较对象的类型会执行转换,转换为同一类型后再进行值得比较。
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
type | Result |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果
- 判断String==Number
"" == 0 //true,因为“”转换为0
" " == 0 //true,同理,会把空字符转换为0
- 判断String==Boolean
"" == true //false,只要有布尔类型,两边都会转换为数字,左边为0
"" == false //true,同理,左边为0,右边为0
" " == true //false,左边为0,右边为1
!" " == true //false,空白字符串取反,先把空字符串转化为布尔类型,为true,取反为false,而右边为true
!" " == false //true,同理,左边为false,右边为false
"hello" == true //false,true转化为数字是1,而"hello"转化为数字是NaN
"hello" == false //false,同理,"hello"转化为数字是NaN,false转化为数字是0
"0" == true //false,"0"转化为数字是0,true转化为数字是1
"0" == false //true,同理,"0"转化为数字是0,false转化为数字是0
"00" == false //true,同理,"00"转化为数字是0
"0.00" == false //true,同理,"0.00"转化为数字是0
- 判断undefined == null,Boolean==Object
undefined == null //true,比较特殊,undefined和null不转化为数字
true == {} //false,true转化为数字是1,{}是Object 类型
[] == true //false,空数组对应的是0
- Object==String/Number
var obj = {
a: 0,
valueOf: function(){return 1} //返回的值为1
}
obj == "[object Object]" //false
obj == 1 //true,obj为1
obj == true //true,obj为1,true为1
网友评论