摘要:預(yù)備知識(shí)非嚴(yán)格比較操作符是會(huì)做強(qiáng)制類(lèi)型轉(zhuǎn)換的,其規(guī)則是會(huì)根據(jù)這些規(guī)則,將兩邊強(qiáng)制轉(zhuǎn)換成相同類(lèi)型,才進(jìn)行比較。
【JavaScript 類(lèi)型比較】為什么空對(duì)象不==true? 背景
Boolean()函數(shù)為強(qiáng)制轉(zhuǎn)換為布爾類(lèi)型的函數(shù),其轉(zhuǎn)換規(guī)則如下:
為什么表達(dá)式[]==true =>false, 表達(dá)式{}==true =>false,按照ToBoolean的規(guī)則,這兩個(gè)表達(dá)式不應(yīng)該都是真true嗎?
示例 解決其實(shí)當(dāng)用試圖用Boolean()強(qiáng)制轉(zhuǎn)化==兩邊為布爾類(lèi)型再進(jìn)行比較時(shí),方向已經(jīng)錯(cuò)了,==強(qiáng)制轉(zhuǎn)換的方式和if(expresssion)中if括號(hào)里的強(qiáng)制轉(zhuǎn)換是不一樣的。
預(yù)備知識(shí):非嚴(yán)格比較操作符==是會(huì)做強(qiáng)制類(lèi)型轉(zhuǎn)換的,其規(guī)則是:
==會(huì)根據(jù)這些規(guī)則,將兩邊強(qiáng)制轉(zhuǎn)換成相同類(lèi)型,才進(jìn)行比較。
其中第7、9條:
7.If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
9.If Type(x) is Object and Type(y) is either String, Number, or Symbol, return the result of the comparison ToPrimitive(x) == y.
大意是:若==兩邊類(lèi)型不一致,布爾值的會(huì)使用Number()強(qiáng)制轉(zhuǎn)換為數(shù)值型,對(duì)象類(lèi)型會(huì)使用ToPrimitive規(guī)則進(jìn)行轉(zhuǎn)換,ToPrimitive規(guī)則如下:
根據(jù)這些規(guī)則,
對(duì)于表達(dá)式[]==true:實(shí)際上等價(jià)于ToPrimitive([]) == ToNumber(true),即Number([].toString()) == Number(true)
對(duì)于表達(dá)式{}==true:實(shí)際上等價(jià)于ToPrimitive({}) == ToNumber(true),即Number({}.toString()) == Number(true)
因?yàn)镹aN為非數(shù)值,因?yàn)椴豢赡艿扔?或1,所以不管是表達(dá)式{}==true還是表達(dá)式{}==false,結(jié)果都為false
總結(jié)
對(duì)于==,如果兩邊類(lèi)型相同(引用類(lèi)型除外),則直接比較值是否相同;如果兩邊類(lèi)型不一致,就把兩邊都變成Number類(lèi)型,然后再比較。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105713.html
摘要:在比較字符串?dāng)?shù)值和布爾值的相等性時(shí),問(wèn)題還比較簡(jiǎn)單。后來(lái),有人提出了這種轉(zhuǎn)換到底是否合理的質(zhì)疑。相等時(shí)的隱式轉(zhuǎn)換對(duì)于操作符,通常都會(huì)先隱式轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換,然后再比較它們的相等性。要比較相等性之前,不能將和轉(zhuǎn)換成其他任何值。 確定兩個(gè)變量是否相等是編程中的一個(gè)非常重要的操作。 在比較字符串、數(shù)值和布爾值的相等性時(shí),問(wèn)題還比較簡(jiǎn)單。但在涉及到對(duì)象的比較時(shí),問(wèn)題就變得復(fù)雜了。最早的 ECMAS...
摘要:原始類(lèi)型值比較原始類(lèi)型值有五種布爾值字符串?dāng)?shù)值。用來(lái)比較兩個(gè)值是否嚴(yán)格相等,與嚴(yán)格比較運(yùn)算符的行為基本一致。返回布爾值,相等返回,不相等返回。 比較運(yùn)算符之相等運(yùn)算符 ES5 比較兩個(gè)值是否相等,只有兩個(gè)運(yùn)算符:相等運(yùn)算符(==)和嚴(yán)格相等運(yùn)算符(===)。前者在比較時(shí)對(duì)于不同數(shù)據(jù)類(lèi)型的值會(huì)進(jìn)行類(lèi)型轉(zhuǎn)換;而后者不會(huì)轉(zhuǎn)換,且結(jié)果更容易預(yù)測(cè),并且因?yàn)闆](méi)有隱式轉(zhuǎn)換,全等比較的運(yùn)行會(huì)更快。因此...
摘要:用對(duì)象字面量創(chuàng)建的對(duì)象會(huì)報(bào)錯(cuò),使用構(gòu)造函數(shù)創(chuàng)建的對(duì)象屬于。發(fā)現(xiàn),構(gòu)造函數(shù)創(chuàng)建的,,,,。從原型鏈角度講,構(gòu)造函數(shù)就是新對(duì)象的的類(lèi)型。 一、前言 類(lèi)型判斷有時(shí)候真的頭疼,但是一旦熟練使用就會(huì)覺(jué)得不過(guò)如此。初級(jí)的,會(huì)判斷數(shù)字和字符串。中級(jí)的,會(huì)判斷數(shù)組和對(duì)象。進(jìn)階的,會(huì)判斷日期,正則,錯(cuò)誤類(lèi)型。高級(jí)的,會(huì)判斷plainObject,空對(duì)象,window對(duì)象等等。 基本類(lèi)型:String、N...
摘要:用對(duì)象字面量創(chuàng)建的對(duì)象會(huì)報(bào)錯(cuò),使用構(gòu)造函數(shù)創(chuàng)建的對(duì)象屬于。發(fā)現(xiàn),構(gòu)造函數(shù)創(chuàng)建的,,,,。從原型鏈角度講,構(gòu)造函數(shù)就是新對(duì)象的的類(lèi)型。 一、前言 類(lèi)型判斷有時(shí)候真的頭疼,但是一旦熟練使用就會(huì)覺(jué)得不過(guò)如此。初級(jí)的,會(huì)判斷數(shù)字和字符串。中級(jí)的,會(huì)判斷數(shù)組和對(duì)象。進(jìn)階的,會(huì)判斷日期,正則,錯(cuò)誤類(lèi)型。高級(jí)的,會(huì)判斷plainObject,空對(duì)象,window對(duì)象等等。 基本類(lèi)型:String、N...
摘要:將他們放在堆中是為了不影響棧的效率。所以簡(jiǎn)單數(shù)據(jù)類(lèi)型的值直接存放在棧中??梢詫?duì)比上面那張圖默認(rèn)是調(diào)用方法的依,于是等于空字符串。空字符串中國(guó)標(biāo)準(zhǔn)時(shí)間方法返回對(duì)象的原始值,可能是字符串?dāng)?shù)值或值等,看具體的對(duì)象。,需要兩個(gè)操作數(shù)同時(shí)轉(zhuǎn)為。 你是否在面試中遇到過(guò)各種奇葩和比較細(xì)節(jié)的問(wèn)題? []==[] //false []==![] //true {}==!{} //false {}==![...
閱讀 2093·2023-04-25 17:57
閱讀 1293·2021-11-24 09:39
閱讀 2492·2019-08-29 16:39
閱讀 3321·2019-08-29 13:44
閱讀 3137·2019-08-29 13:14
閱讀 2327·2019-08-26 11:36
閱讀 3823·2019-08-26 11:00
閱讀 955·2019-08-26 10:14