先來看這個例子,請問下面表示式的值是多少。
如果你不確定答案,或者想知道語言內部怎麼處理,就可以去檢視規格,7.2.12小節是對相等運算子(0
==null
==
)的描述。
規格對每一種語法行為的描述,都分成兩部分:先是總體的行為描述,然後是實現的演算法細節。相等運算子的總體描述,只有一句話。
"the comparison上面這句話的意思是,相等運算子用於比較兩個值,返回x == y
, wherex
andy
are values, producestrue
orfalse
."
true
或false
。
下面是演算法細節。
returnifabrupt(x).上面這段演算法,一共有12步,翻譯如下。returnifabrupt(y).
if
type(x)
is the same astype(y)
, thenreturn the result of performing strict equality comparison
x === y
.if
x
isnull
andy
isundefined
, returntrue
.if
x
isundefined
andy
isnull
, returntrue
.if
type(x)
is number andtype(y)
is string,return the result of the comparison
x == tonumber(y)
.if
type(x)
is string andtype(y)
is number,return the result of the comparison
tonumber(x) == y
.if
type(x)
is boolean, return the result of the comparisontonumber(x) == y
.if
type(y)
is boolean, return the result of the comparisonx == tonumber(y)
.if
type(x)
is either string, number, or symbol andtype(y)
is object, thenreturn the result of the comparison
x == toprimitive(y)
.if
type(x)
is object andtype(y)
is either string, number, or symbol, thenreturn the result of the comparison
toprimitive(x) == y
.return
false
.
如果由於x
不是正常值(比如丟擲乙個錯誤),中斷執行。如果
y
不是正常值,中斷執行。如果
type(x)
與type(y)
相同,執行嚴格相等運算x === y
。如果
x
是null
,y
是undefined
,返回true
。如果
x
是undefined
,y
是null
,返回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,因此它不返回...