1. 程式人生 > 實用技巧 >JavaScript相等操作符(==)

JavaScript相等操作符(==)

參考:
連結1
連結2
連結3

兩組操作符

相等:==(先轉換再比較)
全等:===(僅比較不轉換)

相等(==)規則

Boolean規則:Boolean(val):如果有一個運算元是Boolean值,則在比較前先將其轉換為數值——false0true1
String&Number規則:Number(string):如果一個是String,一個是Number,則先將String轉為Number
Object規則:valueOf(obj):如果有一個是物件,則呼叫valueOf方法(陣列調toString()方法)。

問題探討

[] == []; // false
{} == {}; // false
[] == ![]; // true
{} == !{}; // false

[] == []{} == {}是因為引用的物件指向不同的指標,所以不會相等。

一、[] == ![]

  • 1:邏輯非(!)的優先順序高於相等操作符(==),所以先計算![]booleanfalse,此時比較的是:[] == false
  • 2:根據上面提到的boolean規則,則需要把 false 轉成 0,此時比較的是:[] == 0
  • 3:根據上面提到的Object規則,呼叫空陣列的toString方法,即[].toString()的值為'',此時比較的是:'' == 0
  • 4:根據上面提到的String規則,將字串轉為數字,即Number('')的值為0,此時比較的是:0 == 0

簡化:
[] == ![]

轉化:[] == false 轉化: [] == 0 轉化'' == 0 轉化: 0 == 0

二、{} == !{}

  • 1:先計算!{}得到false,此時比較的是:{} == false
  • 2:呼叫Booean規則,計算Boolean({})得到true,此時比較的是true == false

簡化:
{} == !{} 轉化:{} == false 轉化:true == false