"==" undefined== null ?

1、undefined == null // true

這個奇葩我也不知道爲什麼就相等了。畢竟在進行類型轉換的時候都是轉換爲數字,undefined 轉換爲數字是 NaNnull 轉換爲數字是0

2、null == 0 // false

null有屬於自己的類型 Null,而不屬於Object類型,typeof之所以會判定爲 Object類型,是因爲JavaScript數據類型在底層都是以二進制的形式表示的,二進制的前三位爲0 會被 typeof 判斷爲對象類型,而null 的二進制位恰好都是 0 ,因此,null 被誤判斷爲 Object 類型。
因爲null在JS 渲染引擎裏面是轉換爲 object對象,對象轉換爲原始類型使用的是 toString()或者是 valueOf(),但是null沒有 toString()和 valueOf(),所以沒辦法用下面的方法進行轉換,具體爲什麼,我也不是很清楚。知道的話告訴我一下。

  • 對象轉換成字符串 的過程
    • 如果對象具有toString()方法,則調用這個方法,如果返回一個原始值,Javascript將這個值轉換爲字符串,並返回這個字符串結果。
    • 如果對象沒有toString(),或者這個方法並不返回一個原始值,那麼JavaScript會調用valueOf()方法,如果存在這個方法,則JS 會調用它,如果返回值是原始值,javaScript將這個值轉換爲字符串,並返回這個字符串的結果。
    • 否則,javascript無法從 toString()或valueOf()獲得一個原始值,因此這時它將拋出一個類型錯誤異常。
  • 對象轉換爲數字 的過程
    - 它會首先嚐試使用 valueOf()方法:
    - 如果對象具有valueOf()方法,後者返回一個原始值,則javaScript將這個原始值轉換爲數字並返回數字
    - 如果對象具有toString()方法,後者返回一個原始值,則JavaScript將其轉換並返回。(對象的toString()方法返回一個字符串直接量,JS將字符串轉換爲數字類型,並返回這個數字)

3、undefined == false // false

  • 需要注意的是: 一個值轉換爲另一個值並不意味着兩個值相等。比如,入股在期望使用布爾值的地方使用 undefined 它將會轉換爲 false,但這不表明 undefined == false。 if語句將undefined轉換爲false,== 運算符並不試圖將其操作數轉換爲布爾值。!!!

4、包裝類與原始值

  • JS會在必要時將包裝類轉換爲原始值, ”==“ 運算符將原始值和其包裝類對象視爲相等,但是 “===” 全等於運算符將他們視爲不等,因爲 通過typeof 可以看到原始值和其包裝類的不同。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章