if(xx)的判斷
1.if(number)
當(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')
}
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 的判斷
對于相同類型的a冗茸、b席镀,相等的判斷較簡單。以下主要討論不同數(shù)據(jù)類型的a夏漱、b之間進行相等運算時的判斷豪诲。
1. string == number
結(jié)果為 toNumber(a) == b ,當(dāng)a無法轉(zhuǎn)換為number時判斷相等為false
"" == 0 //true
" " == 0 //true
"hello" == 0 //false
"hello" == 1 //false
"2" == 2 //true
2. boolean == (any)
Boolean在相等運算時會轉(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
3. object == number/string
object會試圖使用valueOf和toString轉(zhuǎn)換后比較
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == 1 //true
[] == 0 //true
[2] == 2 //true
4. null == undefined //true
toNumber
undefined --> NaN
null --> 0
boolean --> true:1, false:0
string --> "abc":NaN,"123":123
總結(jié):
做相等運算時葵蒂,一般傾向于將不同的數(shù)據(jù)類型都轉(zhuǎn)化為數(shù)值交播,或是轉(zhuǎn)化為相同的數(shù)據(jù)類型.
如果兩個值類型相同,則執(zhí)行嚴格相等的運算
如果兩個值的類型不同
如果一個是null践付,一個是undefined秦士,那么相等
如果一個是數(shù)字,一個是字符串荔仁,先將字符串轉(zhuǎn)為數(shù)字伍宦,然后比較
如果一個值是true/false則將其轉(zhuǎn)為1/0比較
如果一個值是對象芽死,一個是數(shù)字或字符串,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
其它就不相等了