面試官:為什么“false == []”和“false == ![]”都返回true?
JavaScript 是一種非常優(yōu)秀的編程語言,但與此同時,它也常常讓我感到困惑。
可能我還不夠了解!有時我真的想不通它是如何工作的,看完這5個奇怪的問題,你就知道我為啥這么說了,你知道這些古怪問題的正確答案嗎?
我們現(xiàn)在開始吧。
1、為什么“false == []”和“false == ![]”都返回true?
朋友們,請不要驚訝這確實是正確答案。
只要我們有了相等比較和相同的知識,我們就能完全理解它是怎么一回事了。
讓我簡要解釋一下它是如何工作的。
當我們遇到一個布爾值和一個對象進行比較時,會將這兩個值轉(zhuǎn)換為數(shù)字進行最后的比較。
所以它會經(jīng)歷這些步驟。
2. 為什么“[] == ![]”返回true?
“1 == !1”的結(jié)果是什么?'fatfish' == !'fatfish' 返回什么?
為什么空數(shù)組如此特別?
朋友們,請用“===”代替“==”,這樣會讓你的工作輕松很多,否則你可能會做噩夢。
3.關(guān)于奇怪的“try catch”
請想一想,getName執(zhí)行返回的是你的好朋友fatfish,還是我們的好朋友medium?
我想你猜對了,答案是“fatfish”。不,不是!答案是“medium”。
這是因為在“try….catch….finally”語句中,finally子句無論是否拋出異常都會被執(zhí)行。另外,如果拋出異常,即使沒有catch子句處理異常,finally子句中的語句也會被執(zhí)行。
4.關(guān)于箭頭功能?
是的,問題很簡單,你會看到fatfish被打印出來了。
但我想請你嘗試回答這段代碼會輸出什么?
請問‘{}’是最終結(jié)果嗎?
不幸的是,這不是我們想象的那樣。未定義的是最后的贏家。
因為‘{}’是fn函數(shù)的一個包含塊,所以它等價于下面的代碼。
5. 為什么 JSON.stringify('fatfish') ! ==‘fatfish’?
name1 會等于 name2 嗎?
我真的很困惑,為什么name1不等于name2?
請小心使用 JSON.stringify 與字符串進行比較,它會讓您陷入困境。
最后
謝謝您的閱讀,并期待您的關(guān)注,您將會閱讀到更多我們推送的優(yōu)質(zhì)文章內(nèi)容。