if的判斷
1.if(number)
if后的括號(hào)里的表達(dá)式會(huì)被強(qiáng)制轉(zhuǎn)換為布爾類型
| 數(shù)據(jù)類型 | 轉(zhuǎn)換結(jié)果 |
|---|---|
| Undefined | false |
| Null | false |
| Boolean | 直接判斷 |
| Number | +0, ?0, 或者 NaN 為 false, 其他為 true |
| String | 空字符串為 false,其他都為 true |
| Object | true |
例:當(dāng) if(number),0、NaN為false,其他值為true
var a = 5
if(a){
console.log('true')
} // true
a = 1
if(a){
console.log('true')
} // true
a = 0
if(a){
console.log('true')
} // false
a = -1
if(a){
console.log('true')
} //false
a = NaN
if(a){
console.log('true')
} //false
2.if(string)
當(dāng) if(string),空字符串為false,其他為true
if('hello'){
console.log('true')
} // true
if(' '){
console.log('true')
} // true
if(''){
console.log('true')
} // false
if('0.00'){
console.log('true')
}//true
3.if(boolean)
當(dāng) if(boolean),直接判斷
if(true){
console.log('true')
} // true
if(false){
console.log('true')
} // false
4.if(object)
當(dāng) if(object),為true
if([1,3,4]){
console.log('true')
} // true
function f(){
var b = 1 + 2;
return b;
}
if(f()){
console.log('true')
} //true
5.if(undefined)
當(dāng) if(undefined),為false
if(undefined){
console.log('true')
} //false
6.if(null)
當(dāng) if(null),為false
if(null){
console.log('true')
} //false
a == b 的判斷
對(duì)于相同類型的a、b,相等的判斷較簡(jiǎn)單。以下主要討論不同數(shù)據(jù)類型的a、b之間進(jìn)行相等運(yùn)算時(shí)的判斷。
- string == number
結(jié)果為 toNumber(a) == b ,當(dāng)a無法轉(zhuǎn)換為number時(shí)判斷相等為false
"" == 0 //true
" " == 0 //true
"hello" == 0 //false
"hello" == 1 //false
"2" == 2 //true
- boolean == (any)
Boolean在相等運(yùn)算時(shí)會(huì)轉(zhuǎn)換為數(shù)值,true為1,false為0。
"" == true //false
"" == false //true
" " == true //false
"hello" == true //false
1 == true //true
0 == false //true
undefined == false //false
undefined == true //false
null == false //false
null == true //false
- object == number/string
object會(huì)試圖使用valueOf和toString轉(zhuǎn)換后比較
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == 1 //true
[] == 0 //true
[2] == 2 //true
- null == undefined //true
toNumber
undefined --> NaN
null --> 0
boolean --> true:1, false:0
string --> "abc":NaN,"123":123
總結(jié):
做相等運(yùn)算時(shí),一般傾向于將不同的數(shù)據(jù)類型都轉(zhuǎn)化為數(shù)值,或是轉(zhuǎn)化為相同的數(shù)據(jù)類型.
- 如果兩個(gè)值類型相同,則執(zhí)行嚴(yán)格相等的運(yùn)算
- 如果兩個(gè)值的類型不同
- 如果一個(gè)是null,一個(gè)是undefined,那么相等
- 如果一個(gè)是數(shù)字,一個(gè)是字符串,先將字符串轉(zhuǎn)為數(shù)字,然后比較
- 如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較
- 如果一個(gè)值是對(duì)象,一個(gè)是數(shù)字或字符串,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
- 其它就不相等了