Skip to content

Commit 7bb5039

Browse files
committed
feat: 更新 pnpm-lock.yaml 版本并优化依赖项,同时为多个 JavaScript 文章添加描述,增强 SEO;修复 Search 组件的搜索占位符;新增 HTTP 核心知识体系文章;更新布局组件以支持 og:image 属性
1 parent 3c63739 commit 7bb5039

File tree

18 files changed

+8942
-6137
lines changed

18 files changed

+8942
-6137
lines changed

pnpm-lock.yaml

Lines changed: 8227 additions & 6081 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/Search.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ top-20 left-4 md:left-[unset] right-4 shadow-2xl rounded-2xl p-2">
9898
dark:bg-white/5 dark:hover:bg-white/10 dark:focus-within:bg-white/10
9999
">
100100
<Icon icon="material-symbols:search" class="absolute text-[1.25rem] pointer-events-none ml-3 transition my-auto text-black/30 dark:text-white/30"></Icon>
101-
<input placeholder="Search" bind:value={keywordMobile}
101+
<input placeholder="{i18n(I18nKey.search)}" bind:value={keywordMobile}
102102
class="pl-10 absolute inset-0 text-sm bg-transparent outline-0
103103
focus:w-60 text-black/50 dark:text-white/50"
104104
>

src/content/posts/javascript/ES2015.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
title: ES2015新特性
3+
description: 深入探讨 ES2015(ES6)的 let/const、箭头函数、类、模板字符串等核心新特性
34
published: 2020-05-02
45
tags: [JavaScript]
56
category: JavaScript
@@ -15,9 +16,11 @@ draft: false
1516
在 ES2015 之前,JavaScript 只有函数作用域和全局作用域,这有时会导致一些难以理解的变量作用域问题。ES2015 引入了`let``const`关键字,它们拥有块级作用域。`let`声明的变量在块级作用域内有效,避免了变量提升带来的潜在风险。例如:
1617

1718
```
18-
let a = 10;
19-
console.log(a); // 输出10
20-
console.log(a); // 报错,a未定义
19+
{
20+
let a = 10;
21+
console.log(a); // 输出 10
22+
}
23+
console.log(a); // 报错:a 未定义(a 仅在块内有效)
2124
```
2225

2326
`const`用于声明常量,一旦声明,其值就不能被改变,并且同样具有块级作用域。这在定义一些固定不变的值时非常有用,比如:

src/content/posts/javascript/ES2016.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
title: ES2016新特性
3+
description: 介绍 ES2016 的 Array.prototype.includes 方法及指数运算符 ** 的用法
34
published: 2020-05-02
45
tags: [JavaScript]
56
category: JavaScript

src/content/posts/javascript/ES2017.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
title: ES2017新特性
3+
description: 详解 ES2017 的 async/await、Object.values/entries、padStart/padEnd 等新特性
34
published: 2020-05-02
45
tags: [JavaScript]
56
category: JavaScript
@@ -22,7 +23,7 @@ async function getData() {
2223
const data = await response.json();
2324
return data;
2425
} catch (error) {
25-
onsole.error('Error fetching data:', error);
26+
console.error('Error fetching data:', error);
2627
}
2728
}
2829

src/content/posts/javascript/ES2018.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
title: ES2018新特性
3+
description: 探秘 ES2018 的异步迭代器、对象 rest/spread、正则 dotAll 与后行断言
34
published: 2022-07-01
45
tags: [JavaScript]
56
category: JavaScript
@@ -80,18 +81,16 @@ console.log(pattern1.test(text)); // false
8081
console.log(pattern2.test(text)); // true
8182
```
8283

83-
另外,后行断言(lookbehind assertions)也是正则表达式的一个强大新特性。它允许我们在匹配模式的前面或后面添加条件,以更精确地控制匹配结果。例如,正向先行断言`(?=...)`和反向后行断言`(?<=...)`
84+
另外,后行断言(lookbehind assertions)也是正则表达式的一个强大新特性。它允许我们在匹配模式的前面或后面添加条件,以更精确地控制匹配结果。例如,正向先行断言`(?=...)`和正向后行断言`(?<=...)`
8485

8586
```
86-
const price = "Price: \$10";
87+
const price = "Price: $10";
8788
88-
const pattern3 = /\d+(?=\\\$)/; // 正向先行断言,匹配后面跟着美元符号的数字
89+
const pattern3 = /\d+(?=\$)/; // 正向先行断言,匹配后面跟着美元符号的数字
90+
const pattern4 = /(?<=\$)\d+/; // 正向后行断言,匹配前面是美元符号的数字
8991
90-
const pattern4 = /(?<=\\\$)\d+/; // 反向后行断言,匹配前面是美元符号的数字
91-
92-
console.log(price.match(pattern3)\[0]); // 10
93-
94-
console.log(price.match(pattern4)\[0]); // 10
92+
console.log(price.match(pattern3)[0]); // 10
93+
console.log(price.match(pattern4)[0]); // 10
9594
```
9695

9796
ES2018 的这些新特性在异步编程、对象操作以及正则表达式等方面提供了更强大的功能和更灵活的处理方式。它们使得 JavaScript 在处理复杂业务逻辑和多样化的开发需求时更加游刃有余。如果你还想了解 ES2018 新特性在实际项目中的应用案例,或者对其他 JavaScript 版本特性感兴趣,欢迎随时告诉我。

src/content/posts/javascript/ES2019.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
title: ES2019新特性
3+
description: 了解 ES2019 的可选 catch、Object.fromEntries、trimStart/trimEnd、flat/flatMap 等特性
34
published: 2022-12-01
45
tags: [JavaScript]
56
category: JavaScript
@@ -15,7 +16,7 @@ JavaScript 不断演变,每次迭代都会得到一些新的内部更新。让
1516
```js
1617
// 原先的代码可能长这样:
1718
try {
18-
// do something
19+
// do something
1920
} catch (e) {
2021
console.log(e);
2122
}
@@ -29,9 +30,9 @@ try {
2930

3031
虽然新的语言规范提供了吞掉错误参数的机制,不过个人建议在实际代码中还是要看情况选择性地使用。
3132

32-
## JSON.superset 超集
33+
## JSON 超集
3334

34-
之前如果 JSON 字符串中包含有行分隔符 (\u2028) 和段落分隔符 (\u2029),那么在解析过程中会报错:SyntaxError: Invalid or unexpected token。es2019 中新增了对它们的支持。
35+
之前如果 JSON 字符串中包含有行分隔符\u2028和段落分隔符\u2029,那么在解析过程中会报错`SyntaxError: Invalid or unexpected token`。ES2019 中新增了对它们的支持。
3536

3637
## Symbol.prototype.description
3738

@@ -60,7 +61,7 @@ foo.toString(); // "function /* foo comment */ foo() {}"
6061

6162
## Object.fromEntries
6263

63-
这是一个全新的方法:根据提供的键值对生成对象。它是我们熟悉的函数 Object.Entries 的逆向操作。(Object.Entries 将对象转换为数组,以便更容易地进行操作。)在转换之后,我们会得到一个数组,但是现在我们可以将调整过后的数组返回到一个对象中。让我们试着用一个例子,我们想平方所有对象属性的值:
64+
这是一个全新的方法:根据提供的键值对生成对象。它是我们熟悉的 `Object.entries()` 的逆向操作。(`Object.entries()` 将对象转换为数组,以便更容易地进行操作。)在转换之后,我们会得到一个数组,但是现在我们可以将调整过后的数组返回到一个对象中。让我们试着用一个例子,我们想平方所有对象属性的值:
6465

6566
```js
6667
const obj = { prop1: 2, prop2: 10, prop3: 15 };
@@ -100,16 +101,14 @@ JSON.stringify("\uDEAD");
100101

101102
## String.trimStart() 和 String.trimEnd()
102103

103-
除了同时删除字符串两边的空格的 String.Trim()之外,现在还出现了另一个方法只删除字符串两边任意一边的空格:
104+
除了同时删除字符串两边的空格的 `String.prototype.trim()` 之外,ES2019 还新增了 `trimStart()``trimEnd()`,可分别只删除字符串开头或结尾的空格:
104105

105106
```js
106107
const str = " hello ";
107108

108-
str.trim(); // "hello";
109-
110-
str.trimStart(); // "hello ";
111-
112-
str.trimEnd(); // " hello";
109+
str.trim(); // "hello"
110+
str.trimStart(); // "hello "(仅删除开头空格)
111+
str.trimEnd(); // " hello"(仅删除结尾空格)
113112
```
114113

115114
## Array.prototype.{flat,flatMap}

src/content/posts/javascript/ES2020.md

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
title: ES2020新特性
3+
description: 全面介绍 ES2020 的 matchAll、Promise.allSettled、可选链、空值合并、BigInt、globalThis 等九大特性
34
published: 2022-12-01
45
tags: [JavaScript]
56
category: JavaScript
@@ -15,7 +16,7 @@ ES2020 已经发布了,一共出 9 个新特性,下面让我们一起来了
1516
```javascript
1617
let str = "<text>JS</text><text>正则</text>";
1718

18-
let reg = /<\w+>(.*?)<\/\w+>/; // 注意这里没有全局搜素标示符“g”
19+
let reg = /<\w+>(.*?)<\/\w+>/; // 注意这里没有全局搜索标识符“g”
1920

2021
str.match(reg);
2122
/*
@@ -79,7 +80,7 @@ for (const match of allMatchs) {
7980
el.onclick = () => {
8081
import(`/path/current-logic.js`)
8182
.then((module) => {
82-
module.doSomthing();
83+
module.doSomething();
8384
})
8485
.catch((err) => {
8586
// load error;
@@ -150,7 +151,7 @@ Promise.allSettled([
150151

151152
## globalThis
152153

153-
Javascript 在不同的环境获取全局对象有不通的方式,node 中通过 global, web 中通过 window, self 等,有些甚至通过 this 获取,但通过 this 是及其危险的,this 在 js 中异常复杂,它严重依赖当前的执行上下文,这些无疑增加了获取全局对象的复杂性。
154+
JavaScript 在不同的环境获取全局对象有不同的方式,node 中通过 global, web 中通过 window, self 等,有些甚至通过 this 获取,但通过 this 是极其危险的,this 在 js 中异常复杂,它严重依赖当前的执行上下文,这些无疑增加了获取全局对象的复杂性。
154155
过去获取全局对象,可通过一个全局函数
155156

156157
```javascript
@@ -221,18 +222,15 @@ let level =
221222
user.level !== undefined && user.level !== null ? user.level : "暂无等级";
222223
```
223224
225+
用空值合并运算符可以这样处理:
226+
224227
```javascript
225-
来看看用空值合并运算符如何处理;
226-
// {
227-
// "level": 0
228-
// }
228+
// user = { "level": 0 }
229229
let level = user.level ?? "暂无等级"; // level -> 0
230230
```
231231
232232
```javascript
233-
// {
234-
// "an_other_field": 0
235-
// }
233+
// user = { "an_other_field": 0 },即 level 为 undefined
236234
let level = user.level ?? "暂无等级"; // level -> '暂无等级'
237235
```
238236

src/content/posts/javascript/ES2021.md

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
title: ES2021新特性
3+
description: 介绍 ES2021 的 replaceAll、Promise.any、逻辑赋值运算符、数值分隔符、WeakRef 等特性
34
published: 2022-12-01
45
tags: [JavaScript]
56
category: JavaScript
@@ -51,7 +52,7 @@ Promise.any([p1, p2, p3])
5152

5253
相似的 API
5354

54-
| 名字 | 描述 | |
55+
| 名字 | 描述 | 版本 |
5556
| ------------------ | ------------------------------------- | ------ |
5657
| Promise.allSettled | 不会短路 | ES2020 |
5758
| Promise.all | 当有一个 rejected 就短路 | ES2015 |
@@ -98,9 +99,9 @@ const token = {};
9899

99100
/**
100101
* @function 注册监听
101-
* @param 需要监听的对象
102-
* @param 需要合并的Grid
103-
* @param 取消监听用的标识符
102+
* @param obj 需要监听的对象
103+
* @param heldValue 传递给回调的值(对象被回收时作为参数传入)
104+
* @param token 取消监听用的标识符
104105
*/
105106
fr.register(obj, "obj deleted!", token);
106107

@@ -120,18 +121,19 @@ fr.unregister(token);
120121

121122
```javascript
122123
let num1 = 1000000000; // 1000000000
123-
124-
let num2 = 1_000_000_000; // 🆕 1000000000
125-
124+
let num2 = 1_000_000_000; // 🆕 1000000000
126125
console.log(num1 === num2); // true
127126

127+
// 正确用法
128128
let a = 1_1; // 11
129-
let a = 1__1 // 错误,只允许一个下划线作为数字分隔符
130-
let a = 1_; // 错误,分隔符不能在尾部
131-
let a = _1; // 错误,分隔符不能在头部
132129

133-
Number(1_1); // 11
134-
Number('1_1'); // NaN
130+
// 以下为错误示例(会报错):
131+
// let b = 1__1; // 错误:只允许一个下划线作为数字分隔符,不可连续
132+
// let c = 1_; // 错误:分隔符不能在尾部
133+
// let d = _1; // 错误:分隔符不能在头部
134+
135+
Number(1_1); // 11
136+
Number('1_1'); // NaN(字符串转数值时无法识别分隔符)
135137
```
136138

137139
:::caution
@@ -147,18 +149,18 @@ Number('1_1'); // NaN
147149
```javascript
148150
a ||= b;
149151
// 等效于以下两种写法
150-
// a || (a = b); a为false时执行右边
152+
// a || (a = b); a 为假值时执行右边
151153
// if(!a) a = b;
152154

153155
a &&= b;
154156
// 等效于以下两种写法
155-
// a && (a = b); a为truth时执行右边
157+
// a && (a = b); a 为真值时执行右边
156158
// if(a) a = b
157159

158160
a ??= b;
159161
// 等效于以下两种写法
160-
// a ?? (a = b); a为undefined或null时执行右边
161-
// if(a === nudefined || a === null) a = b;
162+
// a ?? (a = b); a 为 undefined 或 null 时执行右边
163+
// if (a === undefined || a === null) a = b;
162164
```
163165
164166
其中`??` 运算符只有左边是 undefined 或 null 才返回右边。

src/content/posts/javascript/ES2022.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
title: ES2022新特性
3+
description: 详解 ES2022 的类字段、静态块、顶级 await、逻辑赋值操作符等新特性
34
published: 2022-07-01
45
tags: [JavaScript]
56
category: JavaScript
@@ -149,13 +150,13 @@ let e;
149150
150151
let f = 40;
151152
152-
e??= f; // 由于e为undefined,执行赋值操作,e = f
153+
e ??= f; // 由于 e 为 undefined,执行赋值操作,e = f
153154
154155
console.log(e); // 输出 40
155156
156157
e = 50;
157158
158-
e??= f; // 由于e不为null和undefined,不会执行赋值操作
159+
e ??= f; // 由于 e 不为 null 和 undefined,不会执行赋值操作
159160
160161
console.log(e); // 输出 50
161162
```

0 commit comments

Comments
 (0)