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