一. if(xx)的判斷
JavaScript 遇到預期為布爾值的地方(比如if語句的條件部分),就會將非布爾值的參數自動轉換為布爾值。系統內部會自動調用Boolean函數。
- 當if括號里面的表達式為Boolean時,直接判斷
if (true){
console.log("true"); //true
}
if (false){
console.log("true"); //false
}
- 當if括號里面的表達式為Number時,分兩種情況,當number為+0,-0,NaN的時候,為false;其他為true。
if(0){
console.log("true"); //false
}
if(NaN){
console.log("true"); //false
}
if(1){
console.log("true"); //true
}
3.當if括號里面的表達式為String時,空字符串為false,其他為true;
if(""){
console.log("true"); //false
}
if("abc"){
console.log("true"); //true
}
4.當if括號里面的表達式為Undefined時,為false;
if(Undefined){
console.log("true"); //false
}
5.當if括號里面的表達式為null時,為false;
if(null){
console.log("true"); //false
}
toBoolean
類型 | 結果 |
---|---|
undefined | false |
null | false |
Boolean | 直接判斷 |
string | ""(空字符串)為false,其他為true |
Object | true |
Number | +0,-0,Nan為false,其他為true |
二. a==b的判斷
==是比較兩個值是否相等,相同類型直接比較,不同類型的話,看情況轉換。
- String==Number --->toNumber(String)==Number
"" = 0 ; //true,因為“”轉換為0
" " = 0 ; //true
"hello" == 1 //false ,因為"hello"轉換為NaN
"hello" == 0 //false,同理
- Boolean==(any) --->toNumber(Boolean)==(any)
1==true; //true,因為true轉換為1
0==false;//true ,因為false轉換為0
"0" == true //false
"0" == false //true
"00" == false //true
"0.00" == false //true
- Object==String/Number---->toPrimitive(Object)
對于 Object 類型,先嘗試調用 .valueOf 方法獲取結果。 如果沒定義,再嘗試調用 .toString方法獲取結
果
{} == true // false
[] == true //false
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" //false
obj == 1 //true
obj == true //true
- null==undefined,//true
- ==知識點
如果兩個值類型相同,則執行嚴格相等的運算
如果兩個值的類型不同
如果一個是null,一個是undefined,那么相等
如果一個是數字,一個是字符串,先將字符串轉為數字,然后比較
如果一個值是true/false則將其轉為1/0比較
如果一個值是對象,一個是數字或字符串,則嘗試使用valueOf和toString轉換后比較
其它就不相等了
toNumber
類型 | 結果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture->1,false->0 |
String | (""-->0, " "-->0 )空字符串與空白字符串轉換數值0,abc"->NaN,"123"->123 |