看到這個題的第一眼,我想都沒寫直接就是false
,不就是乙個取反嗎,還比較啥…ok,這個時候已經掉到坑里去了,我太小瞧它了!
這道題有兩個點:
下面我們看看分析:
首先,!
的優先順序大於==
,所以會先計算!
,而其實是乙個引用型別,這裡又涉及到了對引用型別轉化為布林值。
轉化為布林值為
true
然後取反後為false
,目前為止右邊已經變成了布林值false
,但是現在該怎麼比較呢,左邊是引用型別,右邊是布林值。那麼這個時候js會進行強制轉換,首先右邊的false
轉化為數字型別為0
,同樣左邊的引用型別轉化為數字型別也為0
,如此一比較,最後的答案就是true
了。但是如果是===
,那肯定是false,因為不會發生這個強制轉換。
其實強制轉化的時候都呼叫了number
這個建構函式(也叫基本型別包裝物件),看下圖:
判斷優先順序!
優先於==
引用型別轉化布林型別boolean()
為true
(boolean()預設為false),!
取反後為true
左右兩邊強制轉化為數字型別number()
為0
(陣列),右邊的number(false)
也為0
上面的問題已經變為了0 == 0
完事!
這道題延伸出來的知識當然不止這些,我們可以舉一反三,比如:
這裡就不給答案啦,大家可以按著這個思路來自己思考。
最後,推薦一篇很好的文章,你會有更好的理解,咱只是借助面試為切入點,來深入挖掘,而不是乙個搬運工!*****==>>>>>>深入理解js的型別、值、型別轉換
上面那篇文章寫得可好了,比我的好多了,當然也可以支援下我的文章,點點贊啥的也萬分感謝啦!(嘻嘻嘻)
認真的思考一下
我是乙個在農村長大,憑著一股不服輸的倔勁走到了今天漂泊在北京快要畢業的研三學生。靠著這股勁頭,我已經走了很遠很遠的路。一路走來有過成功,也有過失敗,嘗到了酸甜苦辣。一直以來以用乙個異想天開而又幼稚的思想活著,但是我覺得這樣很簡單,這樣活著很開心,不想跟任何人去掙搶什麼,只是本分的接收著屬於自己的東西...
閉上雙眼,思考一下
由 淺薄 網際網路怎樣毒化了我們的大腦 想到的之二。閉上雙眼,思考一下。我是乙個普通人。我一直非常猶豫 患得患失,一直不太自信,有時會非常空虛,經常漫無目的 迷失自我,會有非常強的危機感。我大部分時間感覺不快樂也不痛苦.為什麼會這樣呢?我非常少去想原因,總認為這一切都是 按部就班 的。回頭想想。我認...
for的效率測試和結果,分享一下
之前一直認為 for int i 0,h arr.count i h i 和for int i 0 i arr.count i 兩種寫法,在c 裡應該是差不多的,今天突然有人問,就寫了個程式測試了一下,結果出乎我的意料 如果arr是list,前者的效率比後者高大約一倍,如果arr是string,兩者...