狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

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

問題1

問題:0.1 + 0.2 === 0.3 的結(jié)果是什么?

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

答案:

    結(jié)果是 false。

解釋:

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

問題2

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

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

答案:

  •  "5" + 3 結(jié)果是 "53"。

  •  "5" - 3 結(jié)果是 2。

解釋:

  •  "5" + 3:當加號 + 出現(xiàn)在字符串和數(shù)字之間時,JavaScript 會把數(shù)字轉(zhuǎn)換為字符串,并拼接在一起。所以 "5" + 3 結(jié)果是 "53"。

  • "5" - 3:減號 - 不會作用于字符串,因此 JavaScript 會將 "5" 轉(zhuǎn)換為數(shù)字 5,然后執(zhí)行減法運算,所以結(jié)果是 2。

問題3

問題:typeof null 的結(jié)果是什么?

console.log(typeof null);

答案:

結(jié)果是 "object"。

解釋:

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

問題4

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

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

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

答案:

輸出結(jié)果是:

1
2

解釋:

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

問題5

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

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

答案:

  •  true + false 的結(jié)果是 1。

  •  [] + {} 的結(jié)果是 "[object Object]"。

解釋:

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

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

問題6

問題:[] == ![] 的結(jié)果是什么?

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

答案:

    結(jié)果是 true。

解釋:

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

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

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

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

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

問題7

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

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

答案:

    輸出是 undefined。

解釋:

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

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

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

結(jié)論

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


本文首發(fā)于公眾號“web前端開發(fā)之旅”,轉(zhuǎn)載請注明出處!


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