7 個 JavaScript 常見陷阱:你真的懂嗎?
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
問題1問題:0.1 + 0.2 === 0.3 的結(jié)果是什么?
答案: 結(jié)果是 false。 解釋: JavaScript 中的小數(shù)(也就是浮點數(shù))并不是總能精確表示。由于浮點數(shù)在計算機中的存儲方式,0.1 + 0.2 實際的結(jié)果并不是我們期望的 0.3,而是 0.30000000000000004。所以當你做比較時,結(jié)果是 false。這主要是因為二進制系統(tǒng)無法完全精確表示某些十進制小數(shù)。 問題2問題:
答案:
解釋:
問題3問題:typeof null 的結(jié)果是什么?
答案: 結(jié)果是 "object"。 解釋: 這是 JavaScript 中一個有趣且常見的現(xiàn)象。null 實際上表示“沒有值”或“空”,但是 typeof null 的結(jié)果是 "object"。這是 JavaScript 早期設(shè)計中的一個 bug,雖然已經(jīng)知道問題,但為了兼容舊代碼一直沒有修復。 問題4問題:什么是閉包?它是如何工作的?
答案: 輸出結(jié)果是:
解釋: 閉包指的是一個函數(shù)可以記住它所在的環(huán)境(變量),即使這個函數(shù)被外部調(diào)用,它仍然能訪問定義時的作用域。上面的例子中,closure 是 outerFunction 的內(nèi)部函數(shù),它可以訪問 count 變量,每次調(diào)用 closure() 時都會遞增并打印 count 的值。這樣通過閉包,我們可以讓函數(shù)保持對外部變量的引用。 問題5問題:true + false 和 [] + {} 的結(jié)果分別是什么?
答案:
解釋:
問題6問題:[] == ![] 的結(jié)果是什么?
答案: 結(jié)果是 true。 解釋: 這個表達式比較復雜,但可以一步步拆解:
問題7問題:以下代碼中 console.log(a) 的輸出是什么?
答案: 輸出是 undefined。 解釋: 這是因為 JavaScript 的變量提升機制。在執(zhí)行代碼前,JavaScript 會將變量聲明提升到作用域的最上方,但不會提升賦值部分。所以上面的代碼實際上等同于:
因此,當執(zhí)行 console.log(a) 時,變量 a 已經(jīng)聲明,但還沒有被賦值,所以結(jié)果是 undefined。 結(jié)論這些問題展示了 JavaScript 中常見的“坑”,包括浮點數(shù)的精度問題、隱式類型轉(zhuǎn)換、閉包的工作原理、以及變量提升等概念。理解這些內(nèi)容可以幫助你更好地編寫代碼,避免常見的錯誤。
該文章在 2024/10/14 12:32:23 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |