if语句是一个比较常用的语句,if语句语法格式为:
if(条件) {
//满足条件则执行
}else {
//否则执行
}
if()括号条件可以为任意表达式,一般为布尔类型,计算结果为true或false;但也可能不为布尔类型,但最终会被强制转化为布尔类型的值。
不同类型强制转换布尔值的结果如下:
类型 | 结果 |
---|---|
undefined | false |
null | false |
boolean | true or false |
number | +0,-0,NaN为false,其余为true |
string | 空字符串为false,其余为true |
object | true |
if("hello") { 非空字符串判断为true
console.log("true")
}
if("") { 空字符串转布尔值为false 不输出
console.log("true")
}
if(" ") { 字符串非空(包含一个空格)为true
console.log("true")
}
if([0]) { 数组为对象,对象转布尔为true
console.log("true")
}
if("0.00") { 非空字符串,为true
console.log("0.00")
}
if(0.00) { 数字0.00转布尔值为false,不输出
console.log("true")
}
所以对于if语句的使用,括号()中的条件一定要使用x==y表达式准确判断,避免使用if(x),if(y),但是==在进行判断时,不同类型也会相互转换。
关于等于==的判断
x | y | 结果 | 解释 |
---|---|---|---|
null | undefined | true | |
number | string | x == toNumber(y) | 只要有number转化成number |
Boolean | (any) | toNumber(x) == y | 只要有boolean转化成number |
Object | String or Number | toPrimitive(x) == y | 将对象转化成字符串或数字 |
otherwise | otherwise | false | 其他情况为false |
大部分能转化成数字,都转换成数字
各类型转化成数字存在以下规则:
类型 | 数字 |
---|---|
undefined | NaN |
null | 0 |
boolean | ture -> 1, false -> 0 |
string | “abc” -> NaN(非数字型字符串), “123” -> 123 |
"" == 0 //true
" " == 0 //true
"" == true //false ""为0 true为1 0≠1
"" == false //true ""为0 false 为0 0=0
" " == true //false " "为0 true为1 0≠1
!" " == true //false " "为true 取反为false false≠true
!" " == false //true
"hello" == true //false "hello"转数字为NaN true为1 NaN≠1
"hello" == false // false "hello"转数字为NaN false为0 NaN≠0
"0" == true //false "0"转成数字为0,true为1 0≠1
"0" == false //true 同理"0"转成数字为0,false为0 0≠0
"00" == false //true 同理"00"转成数字为0,false为0 0≠0
"0.00" == false //true 同理"0.00"转成数字为0,false为0 0≠0
**undefined == null // true 特殊!谨记!!!!
{} == true //false true转化成数字为1 空对象没有返回数值
[] == true //false 同理
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" //对象非空返回数值1,1≠"[object Object]"
obj == 1 //true 返回1 1=1
obj == true //true true转换成数值为1 1=1
网友评论