深入相等運算子

2021-07-09 14:02:27 字數 3105 閱讀 1647

先來看這個例子,請問下面表示式的值是多少。

0

==null

如果你不確定答案,或者想知道語言內部怎麼處理,就可以去檢視規格,7.2.12小節是對相等運算子(==)的描述。

規格對每一種語法行為的描述,都分成兩部分:先是總體的行為描述,然後是實現的演算法細節。相等運算子的總體描述,只有一句話。

"the comparisonx == y, wherexandyare values, producestrueorfalse."

上面這句話的意思是,相等運算子用於比較兩個值,返回truefalse

下面是演算法細節。

returnifabrupt(x).

returnifabrupt(y).

iftype(x)is the same astype(y), then 

return the result of performing strict equality comparisonx === y.

ifxisnullandyisundefined, returntrue.

ifxisundefinedandyisnull, returntrue.

iftype(x)is number andtype(y)is string, 

return the result of the comparisonx == tonumber(y).

iftype(x)is string andtype(y)is number, 

return the result of the comparisontonumber(x) == y.

iftype(x)is boolean, return the result of the comparisontonumber(x) == y.

iftype(y)is boolean, return the result of the comparisonx == tonumber(y).

iftype(x)is either string, number, or symbol andtype(y)is object, then 

return the result of the comparisonx == toprimitive(y).

iftype(x)is object andtype(y)is either string, number, or symbol, then 

return the result of the comparisontoprimitive(x) == y.

returnfalse.

上面這段演算法,一共有12步,翻譯如下。

如果x不是正常值(比如丟擲乙個錯誤),中斷執行。

如果y不是正常值,中斷執行。

如果type(x)type(y)相同,執行嚴格相等運算x === y

如果xnullyundefined,返回true

如果xundefinedynull,返回true

如果type(x)是數值,type(y)是字串,返回x == tonumber(y)的結果。

如果type(x)是字串,type(y)是數值,返回tonumber(x) == y的結果。

如果type(x)是布林值,返回tonumber(x) == y的結果。

如果type(y)是布林值,返回x == tonumber(y)的結果。

如果type(x)是字串或數值或symbol值,type(y)是物件,返回x == toprimitive(y)的結果。

如果type(x)是物件,type(y)是字串或數值或symbol值,返回toprimitive(x) == y的結果。

返回false

由於0的型別是數值,null的型別是null(這是規格4.3.13小節的規定,是內部type運算的結果,跟typeof運算子無關)。因此上面的前11步都得不到結果,要到第12步才能得到false

0

==null

// false

Python is同一性運算子和 相等運算子區別

python中有很多運算子,今天我們就來講講is和 兩種運算子在應用上的本質區別是什麼。在講is和 這兩種運算子區別之前,首先要知道python中物件包含的三個基本要素,分別是 id 身份標識 python type 資料型別 和value 值 is和 都是對物件進行比較判斷作用的,但對物件比較判斷...

(運算子) 運算子

運算子既可作為一元運算子也可作為二元運算子。備註 unsafe context data guid 00bf87717d88a9fac1afadb796c675da 一元 運算子返回運算元的位址 要求 unsafe 上下文 bool data guid 9efd189df2cfb88799dca08...

C 程式設計中刪除運算子與相等運算子的使用解析

delete刪除運算子 釋放記憶體塊。語法 delete cast expression delete cast expression 備註cast expression 引數必須是指向以前分配給使用 new 運算子建立的物件的記憶體塊的指標。delete 運算子的結果型別為 void,因此它不返回...