思考一下 的結果

2021-09-26 14:48:21 字數 1173 閱讀 4967

看到這個題的第一眼,我想都沒寫直接就是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,兩者...