回覆列表
  • 1 # 使用者1449705491244

    "==="叫做嚴格運算子,"=="叫做相等運算子。嚴格運算子的運算規則如下,(1)不同型別值如果兩個值的型別不同,直接返回false。(2)同一類的原始型別值

    同一型別的原始型別的值(數值、字串、布林值)比較時,值相同就返回true,值不同就返回false。

    (3)同一類的複合型別值

    兩個複合型別(物件、陣列、函式)的資料比較時,不是比較它們的值是否相等,而是比較它們是否指向同一個物件。

    (4)undefined和null

    undefined 和 null 與自身嚴格相等。

    相等運算子在比較相同型別的資料時,與嚴格相等運算子完全一樣。

    在比較不同型別的資料時,相等運算子會先將資料進行型別轉換,然後再用嚴格相等運算子比較。型別轉換規則如下:

    (1)原始型別的值

    原始型別的資料會轉換成數值型別再進行比較。字串和布林值都會轉換成數值,所以題主的問題中會有第二個string輸出。

    (2)物件與原始型別值比較

    物件(這裡指廣義的物件,包括數值和函式)與原始型別的值比較時,物件轉化成原始型別的值,再進行比較。

    (3)undefined和null

    undefined和null與其他型別的值比較時,結果都為false,它們互相比較時結果為true。

    (4)相等運算子的缺點

    相等運算子隱藏的型別轉換,會帶來一些違反直覺的結果。

    這就是為什麼建議儘量不要使用相等運算子。至於使用相等運算子會不會對後續程式碼造成意外影響,答案是有可能會。也就是說當a為undefined時,輸出的值會有變化,而在程式設計中物件變成undefined實在是太常見了。推薦一篇文章

  • 中秋節和大豐收的關聯?
  • 形容夜遊西湖的句子有哪些?