1. 程式人生 > >每日一則(1):==操作符比較規則

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

最近在找工作,所以空閒時間就看了看面試題,看了幾個都做錯了,然後就找了找原因,我把題目列出來,你看看你們能做對不?嘻嘻。

題目

1.[]==[]

2.[]==false

3.[]=![]

4.null==undefined

5.NAN==NAN

答案

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

解答

其實在相等操作符比較時候是有一定規則的,這個在javascript高階程式設計中p51頁有講解。

在轉換不同的資料型別時,相等和不相等操作符遵循以下規則:

1.如果有一個運算元是布林值,則在比較相等之前先講其轉換為數值----false轉換為0,而true轉換為1。

2.如果一個運算元是字串,另一個運算元是數值,在比較相等之前先講字串轉換為數值。

3.如果一個運算元是物件,另一個不是,則呼叫物件的valueOf()方法,用得到的基本型別值按照前面的規則進行比較。

注意:這兩個運算元在比較的時候應該遵循以下規則:

1.null和undefined是相等的.

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

3.如果兩個運算元都是物件,則比較他們是不是同一個物件,如果兩個操作符都指向同一個物件,則為true,否則為false。

4.如果有一個運算元為NAN,則相等操作符返回false,而不相等操作符返回true。重要提示:NaN不等於NaN.

在有這個規則後,再看前面的幾道題,就會簡單點哦。接下來我們來一個一個分析下。

1.因為兩個運算元都是物件,所以按注意中的規則4來進行判斷依據,在該問題中,兩個陣列宣告[]是不一樣的,只要宣告一次就會在記憶體中開闢一個新的空間,按照不嚴謹的說法就是,兩個陣列指向的不是同一個地址,那麼就不是同一個物件,所以不相等。怎麼才算是同一個物件,
比如:
var a=[];
console.log(a==a) //true
這樣子就是用一個物件,a變數中儲存著相同的地址。

2.按照規則1和3,我們先把布林值轉換為數值0,如下
[]==0
然後呼叫物件的valueOf()方法得到還是本身[]所以要呼叫tostring()方法得到“”
“”==0
在js中“”轉換為布林值就是false,轉化為數值就是0所以相等。

3.因為!的優先順序最高,所以會先進行運算,(加!的一定是轉換成boolean)所有物件的轉化為布林值都是true,所以!true就是false,然後就按2題解析,得到結果為true。

4.5都是規定。

以上都是自己分析外加看別人的分析總結的,我這個前端小白有哪裡說的不對的地方,歡迎指出,共同進步,才能建設美好的未來嘛,哈哈!

前端的道路是無止境,每天都有新東西,舊東西還要加以沉澱,所以想寫一個每日一則的專題,來記錄和積累一些知識,也是為了激勵自己每天要不斷學習總結。我們一起努力把。嘻嘻。