欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

7 個 JavaScript 常見陷阱:你真的懂嗎?

admin
2024年10月12日 21:19 本文熱度 415

JavaScript 有時看起來很簡單,但其中的一些細節常常容易讓人犯錯。下面有 7 個問題,涵蓋了 JavaScript 的一些常見概念和陷阱。看似簡單的問題,其實暗藏玄機。如果你能順利回答這些問題,說明你對 JavaScript 已經有了不錯的理解!

問題1

問題:0.1 + 0.2 === 0.3 的結果是什么?

console.log(0.1 + 0.2 === 0.3);

答案:

    結果是 false。

解釋:

JavaScript 中的小數(也就是浮點數)并不是總能精確表示。由于浮點數在計算機中的存儲方式,0.1 + 0.2 實際的結果并不是我們期望的 0.3,而是 0.30000000000000004。所以當你做比較時,結果是 false。這主要是因為二進制系統無法完全精確表示某些十進制小數。

問題2

問題:"5" + 3 和 "5" - 3 的結果分別是什么?

console.log("5" + 3);
console.log("5" - 3);

答案:

  •  "5" + 3 結果是 "53"。

  •  "5" - 3 結果是 2。

解釋:

  •  "5" + 3:當加號 + 出現在字符串和數字之間時,JavaScript 會把數字轉換為字符串,并拼接在一起。所以 "5" + 3 結果是 "53"。

  • "5" - 3:減號 - 不會作用于字符串,因此 JavaScript 會將 "5" 轉換為數字 5,然后執行減法運算,所以結果是 2。

問題3

問題:typeof null 的結果是什么?

console.log(typeof null);

答案:

結果是 "object"。

解釋:

這是 JavaScript 中一個有趣且常見的現象。null 實際上表示“沒有值”或“空”,但是 typeof null 的結果是 "object"。這是 JavaScript 早期設計中的一個 bug,雖然已經知道問題,但為了兼容舊代碼一直沒有修復。

問題4

問題:什么是閉包?它是如何工作的?

function outerFunction({
  let count = 0;
  return function({
    count++;
    console.log(count);
  };
}

const closure = outerFunction();
closure(); // ?
closure(); // ?

答案:

輸出結果是:

1
2

解釋:

閉包指的是一個函數可以記住它所在的環境(變量),即使這個函數被外部調用,它仍然能訪問定義時的作用域。上面的例子中,closure 是 outerFunction 的內部函數,它可以訪問 count 變量,每次調用 closure() 時都會遞增并打印 count 的值。這樣通過閉包,我們可以讓函數保持對外部變量的引用。

問題5

問題:true + false 和 [] + {} 的結果分別是什么?

console.log(true + false);
console.log([] + {});

答案:

  •  true + false 的結果是 1。

  •  [] + {} 的結果是 "[object Object]"。

解釋:

  •  true + false:在 JavaScript 中,true 相當于 1,false 相當于 0,所以 true + false 就是 1 + 0,結果是 1。

  • [] + {}:空數組 [] 轉換為字符串時會變成 ""(空字符串),空對象 {} 轉換為字符串時會變成 "[object Object]",所以結果是 "[object Object]"。

問題6

問題:[] == ![] 的結果是什么?

console.log([] == ![]);

答案:

    結果是 true。

解釋:

這個表達式比較復雜,但可以一步步拆解:

  1. ![] 是對空數組取反,空數組是一個“真值”(truthy),所以 ![] 是 false。

  2. 表達式變成了 [] == false。

  3. JavaScript 在比較時會將 [] 轉換為空字符串 "",并將 false 轉換為 0。

  4. 然后 "" == 0 結果是 true,因為在 JavaScript 中空字符串會被轉換為 0 進行比較。

問題7

問題:以下代碼中 console.log(a) 的輸出是什么?

console.log(a);
var a = 5;

答案:

    輸出是 undefined。

解釋:

這是因為 JavaScript 的變量提升機制。在執行代碼前,JavaScript 會將變量聲明提升到作用域的最上方,但不會提升賦值部分。所以上面的代碼實際上等同于:

var a;
console.log(a); // undefined
a = 5;

因此,當執行 console.log(a) 時,變量 a 已經聲明,但還沒有被賦值,所以結果是 undefined。

結論

    這些問題展示了 JavaScript 中常見的“坑”,包括浮點數的精度問題、隱式類型轉換、閉包的工作原理、以及變量提升等概念。理解這些內容可以幫助你更好地編寫代碼,避免常見的錯誤。


本文首發于公眾號“web前端開發之旅”,轉載請注明出處!


該文章在 2024/10/14 12:32:23 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved