js中null與0的比較
簡單來說就是:
要比較相等性之前,不能將null和undefined轉換成其他任何值。就是undefined和null與其他數在進行相等判斷時不進行型別轉換。
null == undefined,這個是true。
而==的結果與>=沒有任何關係,即>=的結果不是>和==結果的累和;
如:
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