JavaScript - ECMAScript 2020:初学者指南
你好,有抱负的程序开发者们!我很高兴能成为你们在这个激动人心的ECMAScript 2020世界探索之旅的向导。作为一名有着多年经验的计算机科学教师,我见过无数学生在掌握这些概念时眼睛发亮。那么,让我们跳进去,探索ES2020为JavaScript语言带来的精彩特性吧!
ECMAScript 2020新增的特性
ECMAScript 2020,也被称为ES2020,就像是JavaScript开发者手中的一个闪亮的新工具箱。它引入了许多令人兴奋的特性,让我们的编码生活变得更加简单和高效。让我们一起打开这个工具箱,看看里面有什么好东西!
BigInt原始数据类型
想象你在数夜空中的星星。有数十亿颗!过去,JavaScript对数字的大小有限制。但现在,有了BigInt,天空才是极限(双关语)!
BigInt允许我们处理非常大的整数。下面是如何使用它的示例:
const bigNumber = 1234567890123456789012345678901234567890n;
console.log(bigNumber);
// 输出:1234567890123456789012345678901234567890n
const result = bigNumber + 1n;
console.log(result);
// 输出:1234567890123456789012345678901234567891n
在这个例子中,我们在数字的末尾加上'n'来创建一个BigInt。这个'n'告诉JavaScript,“嘿,这是一个BigInt!”我们可以像对普通数字那样对BigInt进行操作,但记住在对任何与BigInt一起使用的数字加上'n'。
空值合并运算符 (??)
你有没有玩过“猜礼物”游戏?你摇晃盒子,如果什么声音都听不到,你就猜测它是空的。空值合并运算符有点像这样,但它是针对代码的!
这个运算符帮助我们检查一个值是否为null或undefined,如果是,我们可以提供一个默认值。下面是如何工作的:
let username = null;
console.log(username ?? "访客");
// 输出:"访客"
username = "Alice";
console.log(username ?? "访客");
// 输出:"Alice"
在第一个例子中,username是null,所以运算符返回“访客”。在第二个例子中,username有一个值,所以它返回那个值。这就像说,“如果盒子里是空的,我们就假设里面是一个泰迪熊!”
Promise allSettled() 方法
想象你是一名教师(就像我一样!)在等待所有学生完成考试。有些学生可能会成功完成,另一些可能会放弃。Promise.allSettled()就像是在等待每个人交上他们的试卷,不管他们做得好不好。
下面是一个例子:
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'foo'));
const promises = [promise1, promise2];
Promise.allSettled(promises).then((results) => results.forEach((result) => console.log(result.status)));
// 输出:
// "fulfilled"
// "rejected"
在这段代码中,我们有两个promise。一个成功解析,另一个被拒绝。Promise.allSettled()等待它们两个都完成,然后给我们每个promise的状态。
String matchAll() 方法
你有没有玩过“找 Waldo”游戏?matchAll()就像是在文本中玩“找 Waldo”!它帮助我们找到字符串中所有模式的出现。
让我们看看它是如何工作的:
const text = "The cat and the hat sat on the mat.";
const regex = /at/g;
const matches = [...text.matchAll(regex)];
console.log(matches);
// 输出:[
// ['at', index: 7, input: 'The cat and the hat sat on the mat.', groups: undefined],
// ['at', index: 19, input: 'The cat and the hat sat on the mat.', groups: undefined],
// ['at', index: 31, input: 'The cat and the hat sat on the mat.', groups: undefined]
// ]
在这里,我们在文本中搜索“at”的所有出现。matchAll()返回一个迭代器,我们使用扩展运算符(...)将其转换为数组。每个匹配项都告诉我们它在哪里以及在字符串中的位置。
可选链运算符 (?.)
最后但同样重要的是,让我们来谈谈可选链运算符。它就像一个谨慎的探险者,在前进之前仔细检查路径的每一步。
下面是如何工作的:
const user = {
name: "Alice",
address: {
street: "123 Main St"
}
};
console.log(user.address?.street);
// 输出:"123 Main St"
console.log(user.phoneNumber?.home);
// 输出:undefined
在这个例子中,我们试图访问可能不存在的属性。可选链运算符允许我们安全地这样做。如果user.address存在,它会尝试访问street。如果user.phoneNumber不存在,它会停止并返回undefined而不是抛出错误。
方法表格
下面是一个我们学到的新方法的便捷表格总结:
方法 | 描述 |
---|---|
BigInt | 允许处理大整数 |
?? (空值合并) | 为null或undefined提供默认值 |
Promise.allSettled() | 等待所有promise解决 |
String.matchAll() | 在字符串中查找所有模式的出现 |
?. (可选链) | 安全访问嵌套对象属性 |
就是这样,朋友们!我们已经探索了ECMAScript 2020的激动人心的新特性。记住,最好的学习方式是实践。所以,打开你的代码编辑器,开始用这些新工具进行实验。快乐编码,愿你的JavaScript之旅充满激情和发现!
Credits: Image by storyset