新聞中心
JavaScript 是一種非常優(yōu)秀的編程語言,但與此同時(shí),它也常常讓我感到困惑。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供華池網(wǎng)站建設(shè)、華池做網(wǎng)站、華池網(wǎng)站設(shè)計(jì)、華池網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、華池企業(yè)網(wǎng)站模板建站服務(wù),10多年華池做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
可能我還不夠了解!有時(shí)我真的想不通它是如何工作的,看完這5個(gè)奇怪的問題,你就知道我為啥這么說了,你知道這些古怪問題的正確答案嗎?
我們現(xiàn)在開始吧。
1、為什么“false == []”和“false == ![]”都返回true?
朋友們,請(qǐng)不要驚訝這確實(shí)是正確答案。
只要我們有了相等比較和相同的知識(shí),我們就能完全理解它是怎么一回事了。
console.log(false == []) // true
console.log(false == ![]) // true
讓我簡要解釋一下它是如何工作的。
當(dāng)我們遇到一個(gè)布爾值和一個(gè)對(duì)象進(jìn)行比較時(shí),會(huì)將這兩個(gè)值轉(zhuǎn)換為數(shù)字進(jìn)行最后的比較。
所以它會(huì)經(jīng)歷這些步驟。
// 1. Convert false to a number to get 0
// 2. Convert [] to a number to get 0
// 3. "0 == 0" Returns true
console.log(false == []) // true
// 1. The result of executing "![]" is false
// 2. false == false Returns true
console.log(false == ![]) // true
2. 為什么“[] == ![]”返回true?
“1 == !1”的結(jié)果是什么?'fatfish' == !'fatfish' 返回什么?
為什么空數(shù)組如此特別?
// 1. The result of executing "![]" is false
// 2. Next, compare "[] == false"
// 3. Convert [] to a number to get 0
// 4. Convert false to a number to get 0
// 5. "0 == 0" Returns true
console.log([] == ![])
朋友們,請(qǐng)用“===”代替“==”,這樣會(huì)讓你的工作輕松很多,否則你可能會(huì)做噩夢(mèng)。
3.關(guān)于奇怪的“try catch”
請(qǐng)想一想,getName執(zhí)行返回的是你的好朋友fatfish,還是我們的好朋友medium?
const getName = () => {
try {
return 'fatfish'
} finally {
return 'medium'
}
}
getName() // ?我想你猜對(duì)了,答案是“fatfish”。不,不是!答案是“medium”。
這是因?yàn)樵凇皌ry….catch….finally”語句中,finally子句無論是否拋出異常都會(huì)被執(zhí)行。另外,如果拋出異常,即使沒有catch子句處理異常,finally子句中的語句也會(huì)被執(zhí)行。
4.關(guān)于箭頭功能?
是的,問題很簡單,你會(huì)看到fatfish被打印出來了。
const fn = () => 'fatfish'
console.log(fn()) // fatfish
但我想請(qǐng)你嘗試回答這段代碼會(huì)輸出什么?
const fn = ()
console.log(fn()) // ?
請(qǐng)問‘{}’是最終結(jié)果嗎?
不幸的是,這不是我們想象的那樣。未定義的是最后的贏家。
因?yàn)椤畕}’是fn函數(shù)的一個(gè)包含塊,所以它等價(jià)于下面的代碼。
const fn = () = {
}
console.log(fn()) // understand
5. 為什么 JSON.stringify('fatfish') ! ==‘fatfish’?
name1 會(huì)等于 name2 嗎?
const name1 = JSON.stringify('fatfish')
const name2 = 'fatfish'
console.log(name1 === name2) // ?
我真的很困惑,為什么name1不等于name2?
const name1 = JSON.stringify('fatfish') // => '"fatfish"'
const name2 = 'fatfish'
console.log(name1 === name2) // '"fatfish"' === 'fatfish' => false請(qǐng)小心使用 JSON.stringify 與字符串進(jìn)行比較,它會(huì)讓您陷入困境。
最后
謝謝您的閱讀,并期待您的關(guān)注,您將會(huì)閱讀到更多我們推送的優(yōu)質(zhì)文章內(nèi)容。
文章標(biāo)題:面試官:為什么“false==[]”和“false==![]”都返回true?
文章出自:http://m.fisionsoft.com.cn/article/dpisjss.html


咨詢
建站咨詢
