JS中Boolean型別的數值轉換與==和===區別
一、JS中資料型別
簡單資料型別:Undefined、Null、Boolean、Number、String
複雜資料型別:Object
Undefined型別只有一個值:undefined,Null型別只有一個值:null
可以用 typeof 來返回某資料型別的字串:
"undefined"——該值未定義
"boolean"——該值為布林值
"string"——該值為字串
"number"——該值為數值
"object"——該值為物件或null
"number"——該值為函式
console.log(typeof "123")//"string" console.log(typeof 123)//"number" console.log(typeof true)//"boolean" console.log(typeof null)//"object" console.log(typeof undefined)//"undefined" console.log(typeof (typeof undefined))//"string"
二、各型別值與Boolean型別的轉化
資料型別 | 轉換為true | 轉換為false |
---|---|---|
Boolean | true | false |
Number | 任何非零數字值(包含無窮大Infinity) | 0和NaN |
String | 任何非空字串 | "" |
Undefined | 不存在 | undefined |
Object | 任何物件 | null |
想提醒大家一句的是0的判斷結果為false,我在使用初期經常因為判斷條件裡有0而沒得到想要的結果,比如:
const isAllowd = 0; if( isAllowd && isAllowd !== null){ console.log("true"); } else { console.log("false"); } //false
三、相等操作符
1、相等與不相等:== ,!=
這兩個操作符在比較相等性前會先轉換運算元的資料型別:
1、如果一個運算元是布林值,在比較相等性之前先將其轉換為數值——false轉換為0,true轉換為1;
if( true == 1){
console.log("true");
} else {
console.log("false");
}//true
if( true == 2){
console.log("true");
} else {
console.log("false");
}//false
2、如果一個運算元是字串,另一個運算元是數值,在比較相等性之前先將字串轉換為數值;
if( "2" == 2){
console.log("true");
} else {
console.log("false");
}//true
3、如果一個運算元是物件,另一個運算元不是,則呼叫物件的valueOf()方法,用得到的基本型別值按前面的規則進行比較;
valueOf():返回物件的字串、數值或布林值表示
這兩個操作符在比較時要遵循下列規則:
1、null和undefined是相等的;
2、要比較相等性之前,不能將null和undefined轉換成其他任何值;
3、如果一個運算元是NaN,則相等操作符返回false,而不相等操作符返回true,即使兩個運算元都是NaN,則相等運算元也返回false,因為按照規則,NaN不等於NaN;
4、如果兩個運算元都是物件,則比較它們是不是同一個物件,如果連個運算元都指向同一個物件,則相等操作符返回true,否則返回false;
一些特殊情況:
表示式 | 值 |
---|---|
null == undefined | true |
“NaN” == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN !== NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
“5” == 5 | true |
2、全等與不全等:=== , !==
全等全不等操作符比較比較嚴格,需要兩個運算元型別和值都相等才行,我開發時一般都用此操作符。