javascript-difference-let-var

#JavaScript 中使用 let 和 var 有什麼區別? 何時應該使用 let 而不是 var?為什麼?讓我們一起找出答案! 在現代 JavaScript 中,我們有三種方式來聲明變量並賦值: const let var 在使用 JavaScript 中的變量時,我總是默認使用 const。它確保變量的值無法重新賦值,因此更安全使用。 但在需要稍後重新聲明變量時,我總是使用 let。 多年來我一直沒有使用 var,對我來說它只是為了保持向後兼容性而存在,當我看到有人使用它時,我總是會感到疑惑。 為什麼呢? 首先,let 具有合理的作用域。 在幾乎所有流行的編程語言中都使用的塊作用域,它指定使用 let 聲明的變量作用域為最接近的塊。 相反,var 更奇怪,因為它具有函數作用域,這意味著使用 var 聲明的變量作用域限制在最接近的函數內。 這對實際應用有影響。例如,在 if 語句內聲明一個變量或將變量用作 for 循環的迭代器。使用 let 使該變量僅在這兩個塊內有效。然而,使用 var 則允許該變量在該塊之外也可用,這可能導致錯誤。 總是使用功能最少的工具,以確保對其擁有最大的控制。 追求極大的力量就需要承擔極大的責任。 喜歡使用 let 的另一個原因是變量提升。與 const 一樣,let 變量不具有變量提升,但在評估時會進行初始化。 相反,var 變量會被提升到函數的頂部,因此即使在其聲明之前的行中也可以使用它們。這很奇怪,對吧? 第三個原因:當您聲明一個已經存在的 let 變量時,您會收到一個錯誤(在 嚴格模式 下)。 最後,另一個重要的區別是:如果您在任何函數之外聲明一個 var 變量,它將被分配給全局對象(在瀏覽器內部為 window)。let 不會以此方式工作;該變量是可用的,但不附加到全局對象,因此無法從文件外部訪問。

javascript-hardest-concepts

#最難理解的JavaScript概念 昨天我在Twitter上問了個問題: “在JavaScript中,最複雜的主題是什麼?你學習它花費最多時間的是哪個?” 我收到了200多個回覆。 以下是一些經常被提到的內容: this 非同步JavaScript(promises, callbacks, async/await) 閉包 事件循環 遞歸 作用域 變數提升 原型繼承 bind(), call(), apply() reduce() 生成器 fetch() 除了生成器這個比較小眾的概念外,其餘的都是我們每天在JavaScript中都會用到的。 我在這個博客上有關於這些主題的文章,你可以使用搜索功能來找到它們,但我問這個問題的原因是我正在為11月份準備一個高質量的新課程,名為The JavaScript Course。 這個課程將從基礎知識開始,因為我不想把還不了解JavaScript的人排除在外,但我們會很快深入到真正的內容。 我想確保覆蓋到所有令人困惑的內容。 我正在組織這個新課程,這是我以前從未做過的方式,非常特別。 這個課程的形式將回顧我在2019年做過的一個課程,每天發送一封郵件,其中包含一些問題和挑戰。 這個課程將持續4週,總共20天(星期一到星期五)。每天都將解鎖一個新的課程,並且以有趣和互動的方式來完成。我們將全力投入到當天的主題中。 每天你都會收到一封郵件,推動你采取行動。穩定性很重要,一旦你註冊,我不希望你只是旁觀。我希望你能加入其中,與其他註冊課程的人一起學習。 這樣一個大型社區,為期20天,可以一起成長。 我為此建立了一個新的課程平台,希望這將是一次很棒的體驗。 當然,我們將建立一個社區,因為這是一個特殊的活動,所有特殊的活動都值得建立一個社區來互相幫助。 嗯,我上面列出的所有主題都將得到特殊對待,因為這可能是一個能讓它們一次擊中要害的課程。

javascript-number-toprecision

#toPrecision()方法 了解 JavaScript 的 toPrecision() 方法的所有内容 该方法返回一个表示特定精度的数值的字符串: new Number(21.2).toPrecision(0) // 出错!参数必须大于 0 new Number(21.2).toPrecision(1) // 2e+1(= 2 \* 10^1 = 2) new Number(21.2).toPrecision(2) // 21 new Number(21.2).toPrecision(3) // 21.2 new Number(21.2).toPrecision(4) // 21.20 new Number(21.2).toPrecision(5) // 21.200

javascript-quotes

#JavaScript中的引號 JavaScript允許使用3種類型的引號: 單引號 雙引號 反引號 第一種和第二種本質上是相同的: const test = 'test' const bike = "bike" 在使用一種引號或另一種引號時,幾乎沒有什麼區別。唯一的區別在於必須對用於界定字符串的引號字符進行轉義: const test = 'test' const test = 'te\'st' const test = 'te"st' const test = "te\"st" const test = "te'st" 有很多樣式指南建議始終使用一種風格而不是另一種。 我個人偏好始終使用單引號,在HTML中使用雙引號。 反引號是JavaScript的最新添加,自2015年的ES6引入以來。 它們具有一個獨特的功能:它們允許多行字符串。 使用逃逸字符,也可以使用常規字符串進行多行字符串: const multilineString = 'A string\non multiple lines' 使用反引號,您可以避免使用逃逸字符: const multilineString = `A string on multiple lines` 不僅如此,您還可以使用${}語法插值變量: const multilineString = `A string on ${1+1} lines` 我在另一篇文章中介紹了使用反引號的字符串(稱為模板文字),該文章更深入地介紹了細節。

javascript-string-match

#match()方法的字串 深入了解JavaScript的字串match()方法 给定一个由regex标识的正则表达式,尝试在字串中匹配它。 示例: 'Hi Flavio'.match(/avio/) // Array [ 'avio' ] 'Test 123123329'.match(/\d+/) // Array [ "123123329" ] 'hey'.match(/(hey|ho)/) //Array [ "hey", "hey" ] '123s'.match(/^(\d{3})(\w+)$/) //Array [ "123s", "123", "s" ] '123456789'.match(/(\d)+/) //Array [ "123456789", "9" ] '123s'.match(/^(\d{3})(?:\s)(\w+)$/) //null '123 s'.match(/^(\d{3})(?:\s)(\w+)$/) //Array [ "123 s", "123", "s" ] 'I saw a bear'.match(/\bbear/) //Array ["bear"] 'I saw a beard'.match(/\bbear/) //Array ["bear"] 'I saw a beard'.match(/\bbear\b/) //null 'cool\_bear'.match(/\bbear\b/) //null 要了解有关正则表达式的更多信息,请参阅我的正则表达式教程。

JavaScript, 如何替換陣列中的元素

如果你知道陣列中的某個元素的索引,你可以通過簡單的賦值來替換它的內容: const items = ['a', 'b', 'c', 'd', 'e', 'f'] const i = 2 items[i] = '--NEW-ITEM--' console.log(items) //[ 'a', 'b', '--NEW-ITEM--', 'd', 'e', 'f' ] 如果你不知道元素的索引,你可能需要首先找到元素在陣列中的索引。

JavaScript,在字串中找尋字符

你如何使用JavaScript在字串中找尋字符? 有一個簡單的方法。 每個字串都有一個includes()方法,它接受一個(或多個)字符。 該方法返回true,如果字串中包含該字符,並返回false,如果不包含: 'a nice string'.includes('a') //true 'a nice string'.includes('b') //false 但是,如果你需要找到字符在字串中的確切位置,你需要使用indexOf()方法: 'a nice string'.indexOf('a') //0 'a nice string'.indexOf('c') //4 如果有多個出現的情況,該方法將返回從左邊開始找到的第一個字符的位置。

JavaScript,如何刪除多個換行符

我有一個字符串,發現它有連續的換行符,就像這樣: 一段話... 另一段話... 另一段話... 但我希望它只有一個換行符: 一段話... 另一段話... 另一段話... 以下是我使用的方法來獲得我想要的結果: text = text.replace(/[\r\n]{2,}/g, '\n\n') 如果正則表達式對你來說是個謎,請參考我的正則表達式指南。

JavaScript,如何導出函數

如何從 JavaScript 文件中導出函數 在 JavaScript 中,我們可以將程序分為多個文件。我們如何使我們在一個文件中定義的函數對其他文件可用? 通常,我們會這樣編寫一個函數: function sum(a, b) { return a + b } 你可以通過以下語法將其導出,以便其他文件可使用: export default sum 我們稱之為默認導出。 需要使用導出函數的文件將使用以下語法導入: import sum from 'myfile'

JavaScript,如何導出多個函數

如何從 JavaScript 文件中導出多個函數 在 JavaScript 中,我們可以將一個程序分為多個文件。我們如何使我們在一個文件中定義的函數可供其他文件使用? 通常,您會這樣編寫一些函數: function sum(a, b) { return a + b } function mul(a, b) { return a \* b } 並且您可以使用以下語法將它們對其他文件進行導出: export { sum, mul } 需要導入導出功能的文件將導入所有函數或只需要的函數: import { sum, mul } from 'myfile' import { mul } from 'myfile'