1. 程式人生 > >js中null與0的比較

js中null與0的比較

簡單來說就是:

要比較相等性之前,不能將null和undefined轉換成其他任何值。就是undefined和null與其他數在進行相等判斷時不進行型別轉換。
null == undefined,這個是true。

另外:>=的結果可以根據<的結果推出(undefined除外 因為會轉化為NaN;同樣NaN除外);
而==的結果與>=沒有任何關係,即>=的結果不是>和==結果的累和;
如:
null>0 //null轉化為number,為0,所以0>0結果為false。
null>=0 //null轉化為number,為0>=0,所以結果為true。
null==0// null在做相等判斷時,不進行轉型,所以null和0為不同型別資料,結果為false

============================================================================

1、null>=0  比較結果為true

運算子是抽象運算,當運算>=時實際是比較的null<0

因為null<0為false,所以null>=0為true;

2、null==0  比較結果為false

後來在ECMAScript 6入門(連結)找到==和===的演算法細節:

規格對每一種語法行為的描述,都分成兩部分:先是總體的行為描述,然後是實現的演算法細節。相等運算子的總體描述,只有一句話。

The comparison x == y, where x and y are values, producestrue or false.

上面這句話的意思是,相等運算子用於比較兩個值,返回true或false。

下面是演算法細節:

1、如果x不是正常值(比如丟擲一個錯誤),中斷執行。

2、如果y不是正常值,中斷執行。

3、如果Type(x)與Type(y)相同,執行嚴格相等運算x === y。

4、如果x是null,y是undefined,返回true。

5、如果x是undefined,y是null,返回true。

6、如果Type(x)是數值,Type(y)是字串,返回x == ToNumber(y)的結果。

7、如果Type(x)是字串,Type(y)是數值,返回ToNumber(x) == y的結果。

8、如果Type(x)是布林值,返回ToNumber(x) == y的結果。

9、如果Type(y)是布林值,返回x == ToNumber(y)的結果。

10、如果Type(x)是字串或數值或Symbol值,Type(y)是物件,返回x == ToPrimitive(y)的結果。

11、如果Type(x)是物件,Type(y)是字串或數值或Symbol值,返回ToPrimitive(x) == y的結果。

12、返回false。

由於0的型別是數值,null的型別是Null(這是規格4.3.13小節的規定,是內部Type運算的結果,跟typeof運算子無關)。因此上面的前11步都得不到結果,要到第12步才能得到false。

null==0 //false