每日一則(1):==操作符比較規(guī)則

最近在找工作,所以空閑時(shí)間就看了看面試題,看了幾個(gè)都做錯(cuò)了,然后就找了找原因,我把題目列出來(lái),你看看你們能做對(duì)不?嘻嘻。

題目

1.[]==[]

2.[]==false

3.[]=![]

4.null==undefined

5.NAN==NAN

答案

1.false??? 2.true?? 3.true 4.true 5.false

解答

其實(shí)在相等操作符比較時(shí)候是有一定規(guī)則的,這個(gè)在javascript高級(jí)程序設(shè)計(jì)中p51頁(yè)有講解。

在轉(zhuǎn)換不同的數(shù)據(jù)類型時(shí),相等和不相等操作符遵循以下規(guī)則:

1.如果有一個(gè)操作數(shù)是布爾值,則在比較相等之前先講其轉(zhuǎn)換為數(shù)值----false轉(zhuǎn)換為0,而true轉(zhuǎn)換為1。

2.如果一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)值,在比較相等之前先講字符串轉(zhuǎn)換為數(shù)值。

3.如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)不是,則調(diào)用對(duì)象的valueOf()方法,用得到的基本類型值按照前面的規(guī)則進(jìn)行比較。

注意:這兩個(gè)操作數(shù)在比較的時(shí)候應(yīng)該遵循以下規(guī)則:

1.null和undefined是相等的.

2.要比較相等性之前,不能將null和undefined轉(zhuǎn)換成任何值。

3.如果兩個(gè)操作數(shù)都是對(duì)象,則比較他們是不是同一個(gè)對(duì)象,如果兩個(gè)操作符都指向同一個(gè)對(duì)象,則為true,否則為false。

4.如果有一個(gè)操作數(shù)為NAN,則相等操作符返回false,而不相等操作符返回true。重要提示:NaN不等于NaN.


在有這個(gè)規(guī)則后,再看前面的幾道題,就會(huì)簡(jiǎn)單點(diǎn)哦。接下來(lái)我們來(lái)一個(gè)一個(gè)分析下。

1.因?yàn)閮蓚€(gè)操作數(shù)都是對(duì)象,所以按注意中的規(guī)則4來(lái)進(jìn)行判斷依據(jù),在該問(wèn)題中,兩個(gè)數(shù)組聲明[]是不一樣的,只要聲明一次就會(huì)在內(nèi)存中開(kāi)辟一個(gè)新的空間,按照不嚴(yán)謹(jǐn)?shù)恼f(shuō)法就是,兩個(gè)數(shù)組指向的不是同一個(gè)地址,那么就不是同一個(gè)對(duì)象,所以不相等。怎么才算是同一個(gè)對(duì)象,比如:? ? ? ? ? var? a=[];?? console.log(a==a) //true ? 這樣子就是用一個(gè)對(duì)象,a變量中存儲(chǔ)著相同的地址。

2.按照規(guī)則1和3,我們先把布爾值轉(zhuǎn)換為數(shù)值0,如下??????????????????????????????????????????????????????????????????????????????? []==0?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 然后調(diào)用對(duì)象的valueOf()方法得到還是本身[]所以要調(diào)用tostring()方法得到“” ????? “”==0?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 在js中“”轉(zhuǎn)換為布爾值就是false,轉(zhuǎn)化為數(shù)值就是0所以相等。

3.因?yàn)椋〉膬?yōu)先級(jí)最高,所以會(huì)先進(jìn)行運(yùn)算,(加!的一定是轉(zhuǎn)換成boolean)所有對(duì)象的轉(zhuǎn)化為布爾值都是true,所以!true就是false,然后就按2題解析,得到結(jié)果為true。

4.5都是規(guī)定。


以上都是自己分析外加看別人的分析總結(jié)的,我這個(gè)前端小白有哪里說(shuō)的不對(duì)的地方,歡迎指出,共同進(jìn)步,才能建設(shè)美好的未來(lái)嘛,哈哈!

前端的道路是無(wú)止境,每天都有新東西,舊東西還要加以沉淀,所以想寫(xiě)一個(gè)每日一則的專題,來(lái)記錄和積累一些知識(shí),也是為了激勵(lì)自己每天要不斷學(xué)習(xí)總結(jié)。我們一起努力把。嘻嘻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 描述:用于操作數(shù)據(jù)值的操作符,包括算術(shù)操作符(如加號(hào)和減號(hào))、位操作符、關(guān)系操作符和相等操作符。 1、一元操作符 ...
    linchwei閱讀 2,008評(píng)論 0 1
  • 什么是 JavaScript 語(yǔ)言? JavaScript 是一種輕量級(jí)的腳本語(yǔ)言。所謂“腳本語(yǔ)言”(script...
    oWSQo閱讀 1,915評(píng)論 0 1
  • 表達(dá)式 表達(dá)式是由數(shù)字、運(yùn)算符、數(shù)字分組符號(hào)(如括號(hào))、自由變量和約束變量等以能求得數(shù)值的有意義排列方法所得的組合...
    劼哥stone閱讀 648評(píng)論 0 4
  • ? 寫(xiě)一篇文章,這個(gè)打算由來(lái)已久,但是到目前為止我的生活一直以來(lái)真是是波瀾不驚,一潭死水,實(shí)在沒(méi)有具體的內(nèi)容可寫(xiě)。...
    彳亍的麥子閱讀 285評(píng)論 0 0
  • 午后,坐在墻角一隅,靜觀花開(kāi)花落。日偏西,余輝擋在大樟樹(shù)外,樹(shù)梢仍受照耀,新葉油綠如鏡,片片左傾右側(cè),似乎吃吃笑著...
    田田愛(ài)花閱讀 278評(píng)論 0 1

友情鏈接更多精彩內(nèi)容