最近在找工作,所以空閑時(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é)。我們一起努力把。嘻嘻。