国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【JavaScript 類型比較】為什么空對象不==true?

gghyoo / 1768人閱讀

摘要:預(yù)備知識非嚴格比較操作符是會做強制類型轉(zhuǎn)換的,其規(guī)則是會根據(jù)這些規(guī)則,將兩邊強制轉(zhuǎn)換成相同類型,才進行比較。

【JavaScript 類型比較】為什么空對象不==true? 背景

Boolean()函數(shù)為強制轉(zhuǎn)換為布爾類型的函數(shù),其轉(zhuǎn)換規(guī)則如下:

問題

為什么表達式[]==true =>false, 表達式{}==true =>false,按照ToBoolean的規(guī)則,這兩個表達式不應(yīng)該都是真true嗎?

示例

解決

其實當用試圖用Boolean()強制轉(zhuǎn)化==兩邊為布爾類型再進行比較時,方向已經(jīng)錯了,==強制轉(zhuǎn)換的方式和if(expresssion)中if括號里的強制轉(zhuǎn)換是不一樣的。
預(yù)備知識:非嚴格比較操作符==是會做強制類型轉(zhuǎn)換的,其規(guī)則是:

==會根據(jù)這些規(guī)則,將兩邊強制轉(zhuǎ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.

大意是:若==兩邊類型不一致,布爾值的會使用Number()強制轉(zhuǎn)換為數(shù)值型,對象類型會使用ToPrimitive規(guī)則進行轉(zhuǎn)換,ToPrimitive規(guī)則如下:

根據(jù)這些規(guī)則,
對于表達式[]==true:實際上等價于ToPrimitive([]) == ToNumber(true),即Number([].toString()) == Number(true)

對于表達式{}==true:實際上等價于ToPrimitive({}) == ToNumber(true),即Number({}.toString()) == Number(true)

因為NaN為非數(shù)值,因為不可能等于0或1,所以不管是表達式{}==true還是表達式{}==false,結(jié)果都為false

總結(jié)
對于==,如果兩邊類型相同(引用類型除外),則直接比較值是否相同;如果兩邊類型不一致,就把兩邊都變成Number類型,然后再比較。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/105713.html

相關(guān)文章

  • Javascript 隱式轉(zhuǎn)換

    摘要:在比較字符串數(shù)值和布爾值的相等性時,問題還比較簡單。后來,有人提出了這種轉(zhuǎn)換到底是否合理的質(zhì)疑。相等時的隱式轉(zhuǎn)換對于操作符,通常都會先隱式轉(zhuǎn)換強制轉(zhuǎn)換,然后再比較它們的相等性。要比較相等性之前,不能將和轉(zhuǎn)換成其他任何值。 確定兩個變量是否相等是編程中的一個非常重要的操作。 在比較字符串、數(shù)值和布爾值的相等性時,問題還比較簡單。但在涉及到對象的比較時,問題就變得復(fù)雜了。最早的 ECMAS...

    AnthonyHan 評論0 收藏0
  • JavaScript的相等比較(==)和(===)及Object.is()的區(qū)別

    摘要:原始類型值比較原始類型值有五種布爾值字符串數(shù)值。用來比較兩個值是否嚴格相等,與嚴格比較運算符的行為基本一致。返回布爾值,相等返回,不相等返回。 比較運算符之相等運算符 ES5 比較兩個值是否相等,只有兩個運算符:相等運算符(==)和嚴格相等運算符(===)。前者在比較時對于不同數(shù)據(jù)類型的值會進行類型轉(zhuǎn)換;而后者不會轉(zhuǎn)換,且結(jié)果更容易預(yù)測,并且因為沒有隱式轉(zhuǎn)換,全等比較的運行會更快。因此...

    王軍 評論0 收藏0
  • JavaScript系列--類型判斷的4種基本方法,研究jquery的type方法,對象的檢測方法

    摘要:用對象字面量創(chuàng)建的對象會報錯,使用構(gòu)造函數(shù)創(chuàng)建的對象屬于。發(fā)現(xiàn),構(gòu)造函數(shù)創(chuàng)建的,,,,。從原型鏈角度講,構(gòu)造函數(shù)就是新對象的的類型。 一、前言 類型判斷有時候真的頭疼,但是一旦熟練使用就會覺得不過如此。初級的,會判斷數(shù)字和字符串。中級的,會判斷數(shù)組和對象。進階的,會判斷日期,正則,錯誤類型。高級的,會判斷plainObject,空對象,window對象等等。 基本類型:String、N...

    lavor 評論0 收藏0
  • JavaScript系列】類型判斷的4種基本方法,研究jquery的type方法,對象的檢測方法

    摘要:用對象字面量創(chuàng)建的對象會報錯,使用構(gòu)造函數(shù)創(chuàng)建的對象屬于。發(fā)現(xiàn),構(gòu)造函數(shù)創(chuàng)建的,,,,。從原型鏈角度講,構(gòu)造函數(shù)就是新對象的的類型。 一、前言 類型判斷有時候真的頭疼,但是一旦熟練使用就會覺得不過如此。初級的,會判斷數(shù)字和字符串。中級的,會判斷數(shù)組和對象。進階的,會判斷日期,正則,錯誤類型。高級的,會判斷plainObject,空對象,window對象等等。 基本類型:String、N...

    xiongzenghui 評論0 收藏0
  • 從[]==![]為true來剖析JavaScript各種蛋疼的類型轉(zhuǎn)換

    摘要:將他們放在堆中是為了不影響棧的效率。所以簡單數(shù)據(jù)類型的值直接存放在棧中。可以對比上面那張圖默認是調(diào)用方法的依,于是等于空字符串。空字符串中國標準時間方法返回對象的原始值,可能是字符串數(shù)值或值等,看具體的對象。,需要兩個操作數(shù)同時轉(zhuǎn)為。 你是否在面試中遇到過各種奇葩和比較細節(jié)的問題? []==[] //false []==![] //true {}==!{} //false {}==![...

    Jeff 評論0 收藏0

發(fā)表評論

0條評論

gghyoo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<