From afd0446e58f5b069b9dfad26db83ecbf7f74a51c Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Sun, 3 Nov 2024 23:29:03 +0800
Subject: [PATCH 01/32] feat: update README.md
---
README.md | 20 --------------------
1 file changed, 20 deletions(-)
diff --git a/README.md b/README.md
index 2066ab795..27d780d0c 100755
--- a/README.md
+++ b/README.md
@@ -18,34 +18,14 @@
| 微信扫码关注官方订阅号,订阅更多精彩内容 |
|-|
|
|
-|
|
**加入读者交流群:**
- **微信群**:加微信 **`imleviding`** 或 [扫二维码](https://user-images.githubusercontent.com/26959437/64596211-0fa63380-d3e6-11e9-983d-bd788ffe2370.jpg),验证信息填写 **`JS 教程`**。
- **QQ 群**:打开 QQ 搜索群号 **`955916282`** 或 [扫二维码](https://user-images.githubusercontent.com/26959437/138594800-29700a46-0cb1-45bd-b614-4b6486cf0124.jpg),验证信息填写 **`JS 教程`**。
-教程配套每日一题:https://github.com/leviding/one-note-a-day
-
本项目托管了现代 JavaScript 教程中文版的内容,此内容发布在 [https://zh.javascript.info](https://zh.javascript.info)
-## Mock 工具
-
-
-
-分享一个好用的开源接口 Mock 工具:[https://github.com/eolinker/eoapi](https://datayi.cn/w/nRbOawVP)
-
-除了 Mock 功能,还集合了 API 管理和测试功能,还可以通过插件广场帮助你将 API 发布到各个应用平台,比如发布到网关上完成 API 上线,或者和低代码平台结合,将 API 快速变成低代码平台中可使用的组件等。
-
-
-
-
## 目录
- [翻译](#翻译)
From 6555c78fee89f013b4a5a066d3fae5c9ee633569 Mon Sep 17 00:00:00 2001
From: 363045841 <79369987+363045841@users.noreply.github.com>
Date: Sun, 3 Nov 2024 23:30:45 +0800
Subject: [PATCH 02/32] fix: typo (#1225)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
更改拼写错误
---
1-js/11-async/02-promise-basics/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/11-async/02-promise-basics/article.md b/1-js/11-async/02-promise-basics/article.md
index ac1acc70c..bcc265ed8 100644
--- a/1-js/11-async/02-promise-basics/article.md
+++ b/1-js/11-async/02-promise-basics/article.md
@@ -12,7 +12,7 @@
2. “消费者代码(consuming code)”想要在“生产者代码”完成工作的第一时间就能获得其工作成果。许多函数可能都需要这个结果。这些就是“粉丝”。
3. **Promise** 是将“生产者代码”和“消费者代码”连接在一起的一个特殊的 JavaScript 对象。用我们的类比来说:这就是就像是“订阅列表”。“生产者代码”花费它所需的任意长度时间来产出所承诺的结果,而 "promise" 将在它(译注:指的是“生产者代码”,也就是下文所说的 executor)准备好时,将结果向所有订阅了的代码开放。
-这种类比并不十分准确,因为 JavaScipt 的 promise 比简单的订阅列表更加复杂:它们还拥有其他的功能和局限性。但以此开始挺好的。
+这种类比并不十分准确,因为 JavaScript 的 promise 比简单的订阅列表更加复杂:它们还拥有其他的功能和局限性。但以此开始挺好的。
Promise 对象的构造器(constructor)语法如下:
From 8a4a5536911ea82d090a96afae05d9e684339662 Mon Sep 17 00:00:00 2001
From: departever <102214647+departever@users.noreply.github.com>
Date: Sun, 3 Nov 2024 23:31:28 +0800
Subject: [PATCH 03/32] fix: typo (#1224)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The missing word is added to the last sentence of the document to ensure that the sentence is smooth. Set the "所空字符串是匹配项。" Change it to "所以空字符串是匹配项。"
---
9-regular-expressions/04-regexp-anchors/1-start-end/solution.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/04-regexp-anchors/1-start-end/solution.md b/9-regular-expressions/04-regexp-anchors/1-start-end/solution.md
index dbab1467f..eea1d4dfd 100644
--- a/9-regular-expressions/04-regexp-anchors/1-start-end/solution.md
+++ b/9-regular-expressions/04-regexp-anchors/1-start-end/solution.md
@@ -2,4 +2,4 @@
这个题目再次证明了锚点不是字符串,而是测试。
-对于空字符串 `""`,正则表达式引擎将会首先匹配 `pattern:^`(输入开始),匹配成功,然后立即匹配结束 `pattern:$`,也匹配成功。所空字符串是匹配项。
+对于空字符串 `""`,正则表达式引擎将会首先匹配 `pattern:^`(输入开始),匹配成功,然后立即匹配结束 `pattern:$`,也匹配成功。所以空字符串是匹配项。
From 7f26705c1d587c0e2affd760051e8dc230847ed4 Mon Sep 17 00:00:00 2001
From: CodePencil
Date: Sun, 3 Nov 2024 23:33:06 +0800
Subject: [PATCH 04/32] fix: update translation (#1228)
---
9-regular-expressions/07-regexp-escaping/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/9-regular-expressions/07-regexp-escaping/article.md b/9-regular-expressions/07-regexp-escaping/article.md
index 1457b3674..a920c222e 100644
--- a/9-regular-expressions/07-regexp-escaping/article.md
+++ b/9-regular-expressions/07-regexp-escaping/article.md
@@ -92,7 +92,7 @@ let regexp = new RegExp(regStr);
alert( "Chapter 5.1".match(regexp) ); // 5.1
```
-## Summary
+## 总结
- 要在字面意义上搜索特殊字符 `pattern:[ \ ^ $ . | ? * + ( )`,我们需要在它们前面加上一个反斜杠 `\`(“转义它们”)。
- 如果在 `pattern:/.../` 内(但不在 `new RegExp` 内),我们还需要转义 `/`。
From 59be2c6751ea13608ad11d70ebfb8165c60aad9b Mon Sep 17 00:00:00 2001
From: Zhihai Liao
Date: Sun, 3 Nov 2024 23:35:11 +0800
Subject: [PATCH 05/32] fix: translation (#1220)
---
1-js/04-object-basics/06-constructor-new/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/04-object-basics/06-constructor-new/article.md b/1-js/04-object-basics/06-constructor-new/article.md
index 53af26adf..432711c7a 100644
--- a/1-js/04-object-basics/06-constructor-new/article.md
+++ b/1-js/04-object-basics/06-constructor-new/article.md
@@ -51,7 +51,7 @@ function User(name) {
}
```
-所以 `new User("Jack")` 的结果是相同的对象:
+所以 `new User("Jack")` 的结果和以下操作的结果相同:
```js
let user = {
From c49ef90b14f68c3ff6382db9fbd5560288033a26 Mon Sep 17 00:00:00 2001
From: Shynur
Date: Sun, 10 Nov 2024 21:03:26 +0800
Subject: [PATCH 06/32] fix: typo (#1230)
---
1-js/02-first-steps/01-hello-world/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/02-first-steps/01-hello-world/article.md b/1-js/02-first-steps/01-hello-world/article.md
index 7de5da6af..b7ece7108 100644
--- a/1-js/02-first-steps/01-hello-world/article.md
+++ b/1-js/02-first-steps/01-hello-world/article.md
@@ -73,7 +73,7 @@
```
-这里,`/path/to/script.js` 是脚本文件从网站根目录开始的绝对路径。当然也可以提供当前页面的相对路径。例如,`src ="script.js"`,就像 `src="./script.js"`,表示当前文件夹中的 `"script.js"` 文件。
+这里,`/path/to/script.js` 是脚本文件从网站根目录开始的绝对路径。当然也可以提供当前页面的相对路径。例如,`src="script.js"`,就像 `src="./script.js"`,表示当前文件夹中的 `"script.js"` 文件。
我们也可以提供一个完整的 URL 地址,例如:
From 978771d7241979911574d4727e791c48ce428c0f Mon Sep 17 00:00:00 2001
From: Vincent <1473345713@qq.com>
Date: Mon, 11 Nov 2024 21:25:43 +0800
Subject: [PATCH 07/32] feat: optimize translation (#1231)
* optimize translation
* Update article.md
---------
Co-authored-by: LeviDing
---
7-animation/1-bezier-curve/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/7-animation/1-bezier-curve/article.md b/7-animation/1-bezier-curve/article.md
index 9a272323a..971fc072d 100644
--- a/7-animation/1-bezier-curve/article.md
+++ b/7-animation/1-bezier-curve/article.md
@@ -8,7 +8,7 @@
[贝塞尔曲线](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)由控制点定义。
-这些点可能有 2、3、4 或更多。
+这些点可能有 2、3、4 个或更多。
例如,两点曲线:
From 92eda9f4f23abd65daed13c8ff004904c6b7aab6 Mon Sep 17 00:00:00 2001
From: Shynur
Date: Sat, 30 Nov 2024 17:30:24 +0800
Subject: [PATCH 08/32] fix: typo (#1232)
---
.../04-private-protected-properties-methods/article.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/1-js/09-classes/04-private-protected-properties-methods/article.md b/1-js/09-classes/04-private-protected-properties-methods/article.md
index ba4d4edb4..4396358d5 100644
--- a/1-js/09-classes/04-private-protected-properties-methods/article.md
+++ b/1-js/09-classes/04-private-protected-properties-methods/article.md
@@ -55,9 +55,9 @@
在许多其他编程语言中,还存在“受保护”的字段:只能从类的内部和基于其扩展的类的内部访问(例如私有的,但可以从继承的类进行访问)。它们对于内部接口也很有用。从某种意义上讲,它们比私有的属性和方法更为广泛,因为我们通常希望继承类来访问它们。
-受保护的字段不是在语言级别的 Javascript 中实现的,但实际上它们非常方便,因为它们是在 Javascript 中模拟的类定义语法。
+受保护的字段不是在语言级别的 JavaScript 中实现的,但实际上它们非常方便,因为它们是在 JavaScript 中模拟的类定义语法。
-现在,我们将使用所有这些类型的属性在 Javascript 中制作咖啡机。咖啡机有很多细节,我们不会对它们进行全面模拟以保持简洁(尽管我们可以)。
+现在,我们将使用所有这些类型的属性在 JavaScript 中制作咖啡机。咖啡机有很多细节,我们不会对它们进行全面模拟以保持简洁(尽管我们可以)。
## 受保护的 "waterAmount"
@@ -188,7 +188,7 @@ new CoffeeMachine().setWaterAmount(100);
[recent browser=none]
-这儿有一个马上就会被加到规范中的已完成的 Javascript 提案,它为私有属性和方法提供语言级支持。
+这儿有一个马上就会被加到规范中的已完成的 JavaScript 提案,它为私有属性和方法提供语言级支持。
私有属性和方法应该以 `#` 开头。它们只在类的内部可被访问。
From 003416670410f6f82ac922bd07b58f759b559be6 Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 23 Jan 2025 07:07:26 +0800
Subject: [PATCH 09/32] Update index.md
---
1-js/index.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/1-js/index.md b/1-js/index.md
index 21d8f457e..69de40284 100644
--- a/1-js/index.md
+++ b/1-js/index.md
@@ -1,3 +1,5 @@
+📢 我们新推出了「数字居民社区」,提供详细的香港银行、海外银行开户、港美股开户、境外电话卡、境外收付款、出入金等教程,一起探索数字居民之路,点击链接即可访问 👉 https://dr.leviding.com/
+
# JavaScript 编程语言
在这儿我们将从头开始学习 JavaScript,也会学习 OOP 等相关高级概念。
From 7c65d21b3729e176a0b4a4f27e7778b222e6b69d Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 23 Jan 2025 07:20:47 +0800
Subject: [PATCH 10/32] Update index.md
---
1-js/index.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/1-js/index.md b/1-js/index.md
index 69de40284..5cfad4d2c 100644
--- a/1-js/index.md
+++ b/1-js/index.md
@@ -2,6 +2,8 @@
# JavaScript 编程语言
+📢 我们新推出了「数字居民社区」,提供详细的香港银行、海外银行开户、港美股开户、境外电话卡、境外收付款、出入金等教程,一起探索数字居民之路,点击链接即可访问 👉 https://dr.leviding.com/
+
在这儿我们将从头开始学习 JavaScript,也会学习 OOP 等相关高级概念。
本教程专注于语言本身,我们默认使用最小环境。
From 2ec6a9caf4119ad19ab9a4000d9829ee0c4b623f Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 23 Jan 2025 07:39:05 +0800
Subject: [PATCH 11/32] Update article.md
---
1-js/01-getting-started/1-intro/article.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md
index 5e53c08ac..184a90ac5 100644
--- a/1-js/01-getting-started/1-intro/article.md
+++ b/1-js/01-getting-started/1-intro/article.md
@@ -1,5 +1,10 @@
# JavaScript 简介
+```smart header="我们新推出了「数字居民社区」"
+📢 提供详细的香港银行、海外银行开户、港美股开户、境外电话卡、境外收付款、出入金等教程,一起探索数字居民之路,点击链接即可访问 👉 https://dr.leviding.com/
+```
+
+
让我们来看看 JavaScript 有什么特别之处,我们可以用它实现什么,以及哪些其他技术可以与其搭配产生奇妙的效果。
## 什么是 JavaScript?
From 1070145e92f1c46db94fe28d60e55601a5a9b48c Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Sat, 22 Feb 2025 23:31:11 +0800
Subject: [PATCH 12/32] feat: update 1-js/index.md
---
1-js/index.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/1-js/index.md b/1-js/index.md
index 5cfad4d2c..7a2f75b6a 100644
--- a/1-js/index.md
+++ b/1-js/index.md
@@ -1,9 +1,9 @@
-📢 我们新推出了「数字居民社区」,提供详细的香港银行、海外银行开户、港美股开户、境外电话卡、境外收付款、出入金等教程,一起探索数字居民之路,点击链接即可访问 👉 https://dr.leviding.com/
-
# JavaScript 编程语言
-📢 我们新推出了「数字居民社区」,提供详细的香港银行、海外银行开户、港美股开户、境外电话卡、境外收付款、出入金等教程,一起探索数字居民之路,点击链接即可访问 👉 https://dr.leviding.com/
-
在这儿我们将从头开始学习 JavaScript,也会学习 OOP 等相关高级概念。
本教程专注于语言本身,我们默认使用最小环境。
+
+---
+
+📢 我们新推出了「数字居民社区」,提供详细的香港银行、海外银行开户、港美股开户、境外电话卡、境外收付款、出入金等教程,一起探索数字居民之路,点击链接即可访问 👉 [https://dr.leviding.com/](https://dr.leviding.com/)
From c7888c154473657199af797da98c10d3b074faaa Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 27 Feb 2025 00:57:44 +0800
Subject: [PATCH 13/32] Update index.md
---
1-js/index.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/1-js/index.md b/1-js/index.md
index 7a2f75b6a..21d8f457e 100644
--- a/1-js/index.md
+++ b/1-js/index.md
@@ -3,7 +3,3 @@
在这儿我们将从头开始学习 JavaScript,也会学习 OOP 等相关高级概念。
本教程专注于语言本身,我们默认使用最小环境。
-
----
-
-📢 我们新推出了「数字居民社区」,提供详细的香港银行、海外银行开户、港美股开户、境外电话卡、境外收付款、出入金等教程,一起探索数字居民之路,点击链接即可访问 👉 [https://dr.leviding.com/](https://dr.leviding.com/)
From 9be8bf9f4404f8e784e3d6d3e25f68a0ee96c5d7 Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 27 Feb 2025 01:19:00 +0800
Subject: [PATCH 14/32] Update article.md
---
1-js/01-getting-started/1-intro/article.md | 8 --------
1 file changed, 8 deletions(-)
diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md
index 184a90ac5..edb3b2112 100644
--- a/1-js/01-getting-started/1-intro/article.md
+++ b/1-js/01-getting-started/1-intro/article.md
@@ -120,14 +120,6 @@ JavaScript 是将这三件事结合在一起的唯一的浏览器技术。
这样的语言还有很多。当然,即使我们在使用此类编译语言,我们也需要了解 JavaScript。因为了解 JavaScript 才能让我们真正明白我们在做什么。
-## Mock 工具
-
-
-
-一个好用的开源接口 Mock 工具:[https://github.com/eolinker/eoapi](https://datayi.cn/w/QReKB8No)
-
-除了 Mock 功能,还集合了 API 管理和测试功能,还可以通过插件广场帮助你将 API 发布到各个应用平台,比如发布到网关上完成 API 上线,或者和低代码平台结合,将 API 快速变成低代码平台中可使用的组件等。
-
## 总结
- JavaScript 最开始是专门为浏览器设计的一门语言,但是现在也被用于很多其他的环境。
From e41b584cd6b44d001d8ead96e9005f60d9f06dca Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Wed, 12 Mar 2025 11:25:01 +0800
Subject: [PATCH 15/32] Update article.md
---
1-js/01-getting-started/1-intro/article.md | 5 -----
1 file changed, 5 deletions(-)
diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md
index edb3b2112..2614a0973 100644
--- a/1-js/01-getting-started/1-intro/article.md
+++ b/1-js/01-getting-started/1-intro/article.md
@@ -1,10 +1,5 @@
# JavaScript 简介
-```smart header="我们新推出了「数字居民社区」"
-📢 提供详细的香港银行、海外银行开户、港美股开户、境外电话卡、境外收付款、出入金等教程,一起探索数字居民之路,点击链接即可访问 👉 https://dr.leviding.com/
-```
-
-
让我们来看看 JavaScript 有什么特别之处,我们可以用它实现什么,以及哪些其他技术可以与其搭配产生奇妙的效果。
## 什么是 JavaScript?
From edf99f4193cb30de4c72e946cea1540ede295185 Mon Sep 17 00:00:00 2001
From: CodePencil
Date: Thu, 7 Aug 2025 16:00:47 +0800
Subject: [PATCH 16/32] fix: Fixed the problem that elk.html could not be
opened (#1251)
---
2-ui/1-document/02-dom-nodes/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/2-ui/1-document/02-dom-nodes/article.md b/2-ui/1-document/02-dom-nodes/article.md
index 9c8b6a2cb..2ee8d3b97 100644
--- a/2-ui/1-document/02-dom-nodes/article.md
+++ b/2-ui/1-document/02-dom-nodes/article.md
@@ -216,7 +216,7 @@ drawHtmlTree(node6, 'div.domtree', 690, 500);
探索 DOM 的另一种方式是使用浏览器开发工具。实际上,这就是我们在开发中所使用的。
-你可以打开这个网页 [elks.html](elks.html),然后打开浏览器开发工具,并切换到元素(Elements)选项卡。
+你可以打开这个网页 [elk.html](elk.html),然后打开浏览器开发工具,并切换到元素(Elements)选项卡。
它看起来像这样:
From a42e844addd1cd52d201d6067d0fec213c320c69 Mon Sep 17 00:00:00 2001
From: CodePencil
Date: Thu, 7 Aug 2025 16:01:55 +0800
Subject: [PATCH 17/32] fix: minor typo (#1250)
---
1-js/99-js-misc/01-proxy/article.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/1-js/99-js-misc/01-proxy/article.md b/1-js/99-js-misc/01-proxy/article.md
index 1d152b909..155ea6021 100644
--- a/1-js/99-js-misc/01-proxy/article.md
+++ b/1-js/99-js-misc/01-proxy/article.md
@@ -154,7 +154,7 @@ dictionary = new Proxy(dictionary, {
*!*
get(target, phrase) { // 拦截读取属性操作
*/!*
- if (phrase in target) { //如果词典中有该短语
+ if (phrase in target) { // 如果词典中有该短语
return target[phrase]; // 返回其翻译
} else {
// 否则返回未翻译的短语
@@ -934,7 +934,7 @@ Proxy 可以拦截许多操作符,例如 `new`(使用 `construct`),`in`
假设我们有一个资源,并且想随时关闭对该资源的访问。
-我们可以做的是将它包装成可一个撤销的代理,没有任何捕捉器。这样的代理会将操作转发给对象,并且我们可以随时将其禁用。
+我们可以做的是将它包装成一个可撤销的代理,没有任何捕捉器。这样的代理会将操作转发给对象,并且我们可以随时将其禁用。
语法为:
From 86f5609da9eed045ecb38fddac0762b1de595192 Mon Sep 17 00:00:00 2001
From: CodePencil
Date: Thu, 7 Aug 2025 16:03:57 +0800
Subject: [PATCH 18/32] fix: minor typo (#1249)
---
1-js/10-error-handling/2-custom-errors/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/10-error-handling/2-custom-errors/article.md b/1-js/10-error-handling/2-custom-errors/article.md
index e25dfe3b7..7cf8a564a 100644
--- a/1-js/10-error-handling/2-custom-errors/article.md
+++ b/1-js/10-error-handling/2-custom-errors/article.md
@@ -247,7 +247,7 @@ try {
2. 函数`readUser` 将捕获内部发生的数据读取 error,例如 `ValidationError` 和 `SyntaxError`,并生成一个 `ReadError` 来进行替代。
3. 对象 `ReadError` 会把对原始 error 的引用保存在其 `cause` 属性中。
-之后,调用 `readUser` 的代码只需要检查 `ReadError`,而不必检查每种数据读取 error。并且,如果需要更多 error 细节,那么可以检查 `readUser` 的 `cause` 属性。
+之后,调用 `readUser` 的代码只需要检查 `ReadError`,而不必检查每种数据读取 error。并且,如果需要更多 error 细节,那么可以检查 `ReadError` 对象的 `cause` 属性。
下面的代码定义了 `ReadError`,并在 `readUser` 和 `try..catch` 中演示了其用法:
From 0a388d011b09a78fad7b5a8903f66acf08e8d759 Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 7 Aug 2025 15:31:31 +0700
Subject: [PATCH 19/32] feat: add xpack
---
1-js/01-getting-started/1-intro/article.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md
index 2614a0973..1e6750d4a 100644
--- a/1-js/01-getting-started/1-intro/article.md
+++ b/1-js/01-getting-started/1-intro/article.md
@@ -120,3 +120,7 @@ JavaScript 是将这三件事结合在一起的唯一的浏览器技术。
- JavaScript 最开始是专门为浏览器设计的一门语言,但是现在也被用于很多其他的环境。
- JavaScript 作为被应用最广泛的浏览器语言,且与 HTML/CSS 完全集成,具有独特的地位。
- 有很多其他的语言可以被“编译”成 JavaScript,这些语言还提供了更多的功能。建议最好了解一下这些语言,至少在掌握了 JavaScript 之后大致的了解一下。
+
+---
+
+
From da70c9b872c10739ce4a367f1fe2bf5cea2b6948 Mon Sep 17 00:00:00 2001
From: CodePencil
Date: Thu, 7 Aug 2025 16:36:30 +0800
Subject: [PATCH 20/32] fix: minor typo (#1248)
* Fix minor typo
* feat: update 1-js/09-classes/07-mixins/article.md
---------
Co-authored-by: LeviDing
---
1-js/09-classes/07-mixins/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/09-classes/07-mixins/article.md b/1-js/09-classes/07-mixins/article.md
index 38a8abd74..58465c7d8 100644
--- a/1-js/09-classes/07-mixins/article.md
+++ b/1-js/09-classes/07-mixins/article.md
@@ -103,7 +103,7 @@ new User("Dude").sayHi(); // Hello Dude!
这是因为方法 `sayHi` 和 `sayBye` 最初是在 `sayHiMixin` 中创建的。因此,即使复制了它们,但是它们的 `[[HomeObject]]` 内部属性仍引用的是 `sayHiMixin`,如上图所示。
-当 `super` 在 `[[HomeObject]].[[Prototype]]` 中寻找父方法时,意味着它搜索的是 `sayHiMixin.[[Prototype]]`,而不是 `User.[[Prototype]]`。
+当 `super` 在 `[[HomeObject]].[[Prototype]]` 中寻找父方法时,意味着它搜索的是 `sayHiMixin.[[Prototype]]`。
## EventMixin
From a79feef30b836ece7b38948af01ef39bc98b62be Mon Sep 17 00:00:00 2001
From: xiefangqing <72127264+xiefangqing@users.noreply.github.com>
Date: Thu, 7 Aug 2025 16:37:28 +0800
Subject: [PATCH 21/32] =?UTF-8?q?fix:=20=E5=B0=86=E2=80=9C=E9=9C=80?=
=?UTF-8?q?=E8=A6=81=E2=80=9D=E6=94=B9=E6=88=90=E2=80=9C=E5=A4=9A=E4=B8=AA?=
=?UTF-8?q?=E2=80=9D=20(#1245)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
1-js/11-async/08-async-await/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/11-async/08-async-await/article.md b/1-js/11-async/08-async-await/article.md
index 6c9c88c20..9b65060b6 100644
--- a/1-js/11-async/08-async-await/article.md
+++ b/1-js/11-async/08-async-await/article.md
@@ -307,4 +307,4 @@ Promise 前的关键字 `await` 使 JavaScript 引擎等待该 promise settle,
这两个关键字一起提供了一个很好的用来编写异步代码的框架,这种代码易于阅读也易于编写。
-有了 `async/await` 之后,我们就几乎不需要使用 `promise.then/catch`,但是不要忘了它们是基于 promise 的,因为有些时候(例如在最外层作用域)我们不得不使用这些方法。并且,当我们需要同时等待需要任务时,`Promise.all` 是很好用的。
+有了 `async/await` 之后,我们就几乎不需要使用 `promise.then/catch`,但是不要忘了它们是基于 promise 的,因为有些时候(例如在最外层作用域)我们不得不使用这些方法。并且,当我们需要同时等待多个任务时,`Promise.all` 是很好用的。
From d52ab96a8a8fc547bc6adb3538204b5fe2e5a1d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=99=BD=E9=96=8B=E6=B0=B4?=
<31907940+cshaptx4869@users.noreply.github.com>
Date: Thu, 7 Aug 2025 16:41:08 +0800
Subject: [PATCH 22/32] fix: WebStorm licence (#1238)
---
1-js/01-getting-started/3-code-editors/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/01-getting-started/3-code-editors/article.md b/1-js/01-getting-started/3-code-editors/article.md
index 8d9c4fbe4..abf4149ed 100644
--- a/1-js/01-getting-started/3-code-editors/article.md
+++ b/1-js/01-getting-started/3-code-editors/article.md
@@ -13,7 +13,7 @@ IDE 加载项目(通常包含很多文件),并且允许在不同文件之
如果你还没考虑好选哪一款 IDE,可以考虑下面两个:
- [Visual Studio Code](https://code.visualstudio.com/)(跨平台,免费)。
-- [WebStorm](https://www.jetbrains.com/webstorm/)(跨平台,收费)。
+- [WebStorm](https://www.jetbrains.com/webstorm/)(跨平台,非商用免费)。
对于 Windows 系统来说,也有个叫 "Visual Studio" 的 IDE,请不要跟 "Visual Studio Code" 混淆。"Visual Studio" 是一个收费的、强大的 Windows 专用编辑器,它十分适合于 .NET 开发。用它进行 JavaScript 开发也不错。"Visual Studio" 有个免费的版本 [Visual Studio Community](https://www.visualstudio.com/vs/community/)。
From 03e9b17a94e3c1003e59f30a3330b6e51891ece3 Mon Sep 17 00:00:00 2001
From: WindBullet <47932422+windbullet@users.noreply.github.com>
Date: Thu, 7 Aug 2025 16:44:02 +0800
Subject: [PATCH 23/32] fix: typo (#1234)
---
1-js/06-advanced-functions/10-bind/6-ask-partial/task.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/06-advanced-functions/10-bind/6-ask-partial/task.md b/1-js/06-advanced-functions/10-bind/6-ask-partial/task.md
index 64428b3b9..a0a7f19cb 100644
--- a/1-js/06-advanced-functions/10-bind/6-ask-partial/task.md
+++ b/1-js/06-advanced-functions/10-bind/6-ask-partial/task.md
@@ -8,7 +8,7 @@ importance: 5
`user` 对象被修改了。现在不是两个函数 `loginOk/loginFail`,现在只有一个函数 `user.login(true/false)`。
-在下面的代码中,我们应该向 `askPassword` 传入什么参数,以使得 `user.login(true)` 结果是 `ok`,`user.login(fasle)` 结果是 `fail`?
+在下面的代码中,我们应该向 `askPassword` 传入什么参数,以使得 `user.login(true)` 结果是 `ok`,`user.login(false)` 结果是 `fail`?
```js
function askPassword(ok, fail) {
From 76b789fa8b606c7410a14095a076779458ab8f63 Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 7 Aug 2025 16:20:43 +0700
Subject: [PATCH 24/32] feat: update README.md
---
README.md | 24 +++++-------------------
1 file changed, 5 insertions(+), 19 deletions(-)
diff --git a/README.md b/README.md
index 27d780d0c..92bd2da62 100755
--- a/README.md
+++ b/README.md
@@ -3,26 +3,12 @@
[](https://gitter.im/zh-javascript-info/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[](https://t.me/TheModernJavaScriptTutorial)
-本教程为 [React 官方文档](https://reactjs.org/docs/getting-started.html#javascript-resources) 与 [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript) 共同推荐的前端教程,持续更新,永久免费,欢迎扫码关注微信公众号,加入读者群。群内自由交流技术,群友帮忙答疑,共同进步!
+本教程为 [React 官方文档](https://reactjs.org/docs/getting-started.html#javascript-resources) 与 [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript) 共同推荐的前端教程,持续更新,永久免费,欢迎扫码关注微信公众号,加入读者群。
-
-
-| 微信扫码关注官方订阅号,订阅更多精彩内容 |
-|-|
-|
|
-
-**加入读者交流群:**
-
-- **微信群**:加微信 **`imleviding`** 或 [扫二维码](https://user-images.githubusercontent.com/26959437/64596211-0fa63380-d3e6-11e9-983d-bd788ffe2370.jpg),验证信息填写 **`JS 教程`**。
-- **QQ 群**:打开 QQ 搜索群号 **`955916282`** 或 [扫二维码](https://user-images.githubusercontent.com/26959437/138594800-29700a46-0cb1-45bd-b614-4b6486cf0124.jpg),验证信息填写 **`JS 教程`**。
+| 微信扫码关注公众号,加微信好友进群 |
+|--------------------------------------|
+|
|
+| 加好友请备注 `JS`,不备注不通过 |
本项目托管了现代 JavaScript 教程中文版的内容,此内容发布在 [https://zh.javascript.info](https://zh.javascript.info)
From a95ac9a80182e16fb07b7f6b2f036263a5119674 Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 7 Aug 2025 16:21:48 +0700
Subject: [PATCH 25/32] feat: update README.md
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 92bd2da62..387936d40 100755
--- a/README.md
+++ b/README.md
@@ -6,8 +6,8 @@
本教程为 [React 官方文档](https://reactjs.org/docs/getting-started.html#javascript-resources) 与 [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript) 共同推荐的前端教程,持续更新,永久免费,欢迎扫码关注微信公众号,加入读者群。
| 微信扫码关注公众号,加微信好友进群 |
-|--------------------------------------|
-|
|
+|:----------------------------:|
+|
|
| 加好友请备注 `JS`,不备注不通过 |
本项目托管了现代 JavaScript 教程中文版的内容,此内容发布在 [https://zh.javascript.info](https://zh.javascript.info)
From 2094695ecba29ccda8bfec39e0e4237032eb1ec8 Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 7 Aug 2025 16:24:54 +0700
Subject: [PATCH 26/32] feat: update README.md
---
README.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/README.md b/README.md
index 387936d40..fa80b7a68 100755
--- a/README.md
+++ b/README.md
@@ -249,7 +249,16 @@ importance: 5
本中文版教程的核心维护者 🚀
+**Admin:**
+
+- LeviDing [@leviding](https://github.com/leviding)
+
+**当前活跃维护者:**
+
- LeviDing [@leviding](https://github.com/leviding)
+
+**历史核心维护者:**
+
- Martin [@MartinsYong](https://github.com/MartinsYong)
- Bemself [bemself](https://github.com/bemself)
- LycheeEng [@lycheeEng](https://github.com/lycheeEng)
From e62062b2cdb4ca07a1820826740f8b4e3fdc6a8a Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 7 Aug 2025 16:25:54 +0700
Subject: [PATCH 27/32] feat: update README.md
---
README.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index fa80b7a68..caea4cc58 100755
--- a/README.md
+++ b/README.md
@@ -251,16 +251,16 @@ importance: 5
**Admin:**
-- LeviDing [@leviding](https://github.com/leviding)
+- [@leviding](https://github.com/leviding)
**当前活跃维护者:**
-- LeviDing [@leviding](https://github.com/leviding)
+- [@leviding](https://github.com/leviding)
**历史核心维护者:**
-- Martin [@MartinsYong](https://github.com/MartinsYong)
-- Bemself [bemself](https://github.com/bemself)
-- LycheeEng [@lycheeEng](https://github.com/lycheeEng)
+- [@MartinsYong](https://github.com/MartinsYong)
+- [bemself](https://github.com/bemself)
+- [@lycheeEng](https://github.com/lycheeEng)
我们希望与大家合作维护本教程。本教程的详细贡献者列表请见:。
From b8d311492414876a9c4ff1bbe78358b66f6e5f12 Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Thu, 7 Aug 2025 16:27:02 +0700
Subject: [PATCH 28/32] feat: update README.md
---
README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index caea4cc58..f92de9b00 100755
--- a/README.md
+++ b/README.md
@@ -251,16 +251,16 @@ importance: 5
**Admin:**
-- [@leviding](https://github.com/leviding)
+- [LeviDing](https://github.com/leviding)
**当前活跃维护者:**
-- [@leviding](https://github.com/leviding)
+- [LeviDing](https://github.com/leviding)
**历史核心维护者:**
-- [@MartinsYong](https://github.com/MartinsYong)
+- [MartinsYong](https://github.com/MartinsYong)
- [bemself](https://github.com/bemself)
-- [@lycheeEng](https://github.com/lycheeEng)
+- [lycheeEng](https://github.com/lycheeEng)
我们希望与大家合作维护本教程。本教程的详细贡献者列表请见:。
From c6083cd33462be80b1d65bb00aefcc19baebff20 Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Sun, 10 Aug 2025 01:06:01 +0700
Subject: [PATCH 29/32] feat: delete xpack
---
1-js/01-getting-started/1-intro/article.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md
index 1e6750d4a..2614a0973 100644
--- a/1-js/01-getting-started/1-intro/article.md
+++ b/1-js/01-getting-started/1-intro/article.md
@@ -120,7 +120,3 @@ JavaScript 是将这三件事结合在一起的唯一的浏览器技术。
- JavaScript 最开始是专门为浏览器设计的一门语言,但是现在也被用于很多其他的环境。
- JavaScript 作为被应用最广泛的浏览器语言,且与 HTML/CSS 完全集成,具有独特的地位。
- 有很多其他的语言可以被“编译”成 JavaScript,这些语言还提供了更多的功能。建议最好了解一下这些语言,至少在掌握了 JavaScript 之后大致的了解一下。
-
----
-
-
From e56f108a956095be784f0e2bc601980d76f92e1a Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Sun, 10 Aug 2025 01:09:33 +0700
Subject: [PATCH 30/32] fix: typo error #1227
---
1-js/99-js-misc/03-currying-partials/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/1-js/99-js-misc/03-currying-partials/article.md b/1-js/99-js-misc/03-currying-partials/article.md
index 2960f8eb7..6e6a5f2f1 100644
--- a/1-js/99-js-misc/03-currying-partials/article.md
+++ b/1-js/99-js-misc/03-currying-partials/article.md
@@ -165,7 +165,7 @@ function curried(...args) {
当我们运行它时,这里有两个 `if` 执行分支:
1. 如果传入的 `args` 长度与原始函数所定义的(`func.length`)相同或者更长,那么只需要使用 `func.apply` 将调用传递给它即可。
-2. 否则,获取一个部分应用函数:我们目前还没调用 `func`。取而代之的是,返回另一个包装器 `pass`,它将重新应用 `curried`,将之前传入的参数与新的参数一起传入。
+2. 否则,获取一个部分应用函数:我们目前还没调用 `func`。取而代之的是,返回另一个包装器,它将重新应用 `curried`,将之前传入的参数与新的参数一起传入。
然后,如果我们再次调用它,我们将得到一个新的部分应用函数(如果没有足够的参数),或者最终的结果。
From 26b8c3ea132b6ea70e1a5c1e173dce51b5c4a00c Mon Sep 17 00:00:00 2001
From: LeviDing
Date: Sun, 10 Aug 2025 01:12:13 +0700
Subject: [PATCH 31/32] fix: #1213
---
6-data-storage/01-cookie/article.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/6-data-storage/01-cookie/article.md b/6-data-storage/01-cookie/article.md
index 9701b8e32..4c9d81abd 100644
--- a/6-data-storage/01-cookie/article.md
+++ b/6-data-storage/01-cookie/article.md
@@ -135,7 +135,7 @@ alert(document.cookie); // 有 cookie user=John
## expires,max-age
-默认情况下,如果一个 cookie 没有设置这两个参数中的任何一个,那么在关闭浏览器之后,它就会消失。此类 cookie 被称为 "session cookie”。
+默认情况下,如果一个 cookie 这两个参数都没有设置,那么在关闭浏览器之后,它就会消失。此类 cookie 被称为 "session cookie”。
为了让 cookie 在浏览器关闭后仍然存在,我们可以设置 `expires` 或 `max-age` 选项中的一个。
From 5a17a97d7f6837f84d0aaa135335c9f2d861f569 Mon Sep 17 00:00:00 2001
From: CodePencil
Date: Fri, 15 Aug 2025 00:16:02 +0800
Subject: [PATCH 32/32] fix: minor typo (#1252)
---
1-js/04-object-basics/08-symbol/article.md | 2 +-
3-frames-and-windows/01-popup-windows/article.md | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/1-js/04-object-basics/08-symbol/article.md b/1-js/04-object-basics/08-symbol/article.md
index 4e4b1e2fd..523ae2833 100644
--- a/1-js/04-object-basics/08-symbol/article.md
+++ b/1-js/04-object-basics/08-symbol/article.md
@@ -118,7 +118,7 @@ user[id] = "Their id value";
我们的标识符和它们的标识符之间不会有冲突,因为 symbol 总是不同的,即使它们有相同的名字。
-……但如果我们处于同样的目的,使用字符串 `"id"` 而不是用 symbol,那么 **就会** 出现冲突:
+……但如果我们出于同样的目的,使用字符串 `"id"` 而不是用 symbol,那么 **就会** 出现冲突:
```js
let user = { name: "John" };
diff --git a/3-frames-and-windows/01-popup-windows/article.md b/3-frames-and-windows/01-popup-windows/article.md
index 45bcffdc0..26b44b5c3 100644
--- a/3-frames-and-windows/01-popup-windows/article.md
+++ b/3-frames-and-windows/01-popup-windows/article.md
@@ -151,7 +151,7 @@ newWindow.onload = function() {
```warn header="同源策略"
只有在窗口是同源的时,窗口才能自由访问彼此的内容(`相同的协议://domain:port`)。
-否则,例如,如果主窗口来自于 `site.com`,弹窗来自于 `gmail.com`,则处于安全性考虑,这两个窗口不能访问彼此的内容。有关详细信息,请参见 一章。
+否则,例如,如果主窗口来自于 `site.com`,弹窗来自于 `gmail.com`,则出于安全性考虑,这两个窗口不能访问彼此的内容。有关详细信息,请参见 一章。
```
## 从弹窗访问窗口