1. 程式人生 > >js 當變數值為0,判斷是否為空時(0=='')返回ture的問題

js 當變數值為0,判斷是否為空時(0=='')返回ture的問題

var aa = 0;
if(aa==""){
    alert("111");
}

------------------------------

var aa = 00;
alert(aa=="");

都是返回true。

這是因為0與 ’ ’ 轉換成布林型都是false的。


 

var aa = 0;
if(aa.toString()==""){   //false
   alert("111");
}

如果不顯示將比較的兩個表示式轉換成型別相同時,那麼: 
相同的字串、數值上相等的數字、相同的物件、相同的 Boolean 值或者(當型別不同時)能被強制轉化為上述情況之一,均被認為是相等的。

此處,將aa和 ’ ’ 均轉換成Boolean型別,所以相等。


 

或者使用===號來比較

var aa = 0;
if(aa===""){   //false
   alert("111");
}

附:==和===號的區別 
簡單來說就是使用“==”時,如果兩邊型別不同,js引擎會把它們轉換成相同型別然後在進行比較,而“===”則不會進行型別轉換,因此當兩邊不是屬於同一個型別,肯定不相等。例如:

var a = 0, b = '0';

alert((a == b) + '--' + (a === b));

此時看到的結果為“true–false”。

=== 判斷規則

1.如果型別不同,就[不相等] 
2.如果兩個都是數值,並且是同一個值,那麼[相等];(!例外)的是,如果其中至少一個是 NaN,那麼[不相等]。(判斷一個值是否是NaN,只能用isNaN()來判斷) 
3.如果兩個都是字串,每個位置的字元都一樣,那麼[相等];否則[不相等]。 
4.如果兩個值都是true,或者都是false,那麼[相等]。 
5.如果兩個值都引用同一個物件或函式,那麼[相等];否則[不相等]。 
6.如果兩個值都是null,或者都是undefined,那麼[相等]。

== 判斷規則: 
1.如果兩個值型別相同,進行 === 比較。 
2.如果兩個值型別不同,他們可能相等。根據下面規則進行型別轉換再比較: 
3.如果一個是null、一個是undefined,那麼[相等]。 
4.如果一個是字串,一個是數值,把字串轉換成數值再進行比較。 
5.如果任一值是 true,把它轉換成 1 再比較;如果任一值是 false,把它轉換成 0 再比較。 
6.如果一個是物件,另一個是數值或字串,把物件轉換成基礎型別的值再比較。物件轉換成基礎型別,利用它的toString或者valueOf方法。js核心內建類,會嘗試valueOf先於toString;例外的是Date,Date利用的是toString轉換。非js核心的物件,令說(比較麻煩,我也不大懂) 
7.任何其他組合,都[不相等]。

特別需要注意的是true、false的轉換,例如:
 

alert(true == 1);  //ture
alert(true == 2); //false, true會轉換成number,也就是1,當然 1 不等於 2
//可以使用 !! 來把一個數據型別轉換為boolean型
alert(true == !!2) //true,!2 === false !(!=2) = !false = true;

另外在js中,如果把一個變數用在邏輯運算中,那麼變數在無初始值或者其值為 0、-0、null、”、false、undefined 或者 NaN時,它的值為 false,這意味test==false,當test為undefined的時候是true的,這正是!==和===的 有用地方。

這兩個操作符將檢查變數的精確值(比如null) 而不是單純的計算值(false)。