JavaScript相等操作符(==)
阿新 • • 發佈:2020-07-28
兩組操作符
相等:==
(先轉換再比較)
全等:===
(僅比較不轉換)
相等(==
)規則
Boolean規則:Boolean(val):如果有一個運算元是Boolean
值,則在比較前先將其轉換為數值——false
為0
,true
為1
。
String&Number規則:Number(string):如果一個是String
,一個是Number
,則先將String
轉為Number
。
Object規則:valueOf(obj):如果有一個是物件,則呼叫valueOf
方法(陣列調toString()
方法)。
問題探討
[] == []; // false {} == {}; // false [] == ![]; // true {} == !{}; // false
[] == []
和{} == {}
是因為引用的物件指向不同的指標,所以不會相等。
一、[] == ![]
- 1:邏輯非(
!
)的優先順序高於相等操作符(==
),所以先計算![]
的boolean
值false
,此時比較的是:[] == 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
。