ES10中新增了十几个新特性,这里我们学习其中几个比较核心的
数组降维神器:Array.prototype.flat()
(拆快递盒)
// 多个快递盒(嵌套数组)
const packages = [1, [2, 3], [4, [5]]];
// 默认拆一层盒子
packages.flat(); // [1, 2, 3, 4, [5]]
// 暴力拆到底(Infinity:无限拆)
packages.flat(Infinity); // [1, 2, 3, 4, 5]
数组智能加工:Array.prototype.flatMap()
(流水线作业)
数据清洗+转换一步到位
const texts = ["hello world", "es10 is awesome"];
// 旧写法(先拆再处理)
texts.map(s => s.split(" ")).flat(); // ["hello", "world", "es10", "is", "awesome"]
// 新写法(一步到位)
texts.flatMap(s => s.split(" ")); // 结果和上面一样
flatMap
相比于旧写法,性能提升20%,且避免了创建中间数组
JSON超集:JSON.stringify()
(修复字符漏洞)
问题:JSON不能正确处理\u2028
(行分隔符)和\u2029
(段分隔符)
这在ES10中得到了修正,ES10直接输出原始字符(将不再转义)
// 旧版JSON(产生错误语法)
JSON.stringify("\u2028"); // 输出:"
"(导致JS解析错误)
// ES10修复:
JSON.stringify("\u2028"); // 输出:""\u2028""(安全字符串)
字符串美容:trimStart()
/trimEnd()
(精准修剪)
用来清理用户输入空格
const userInput = " 前端开发 ";
userInput.trimStart(); // "前端开发 "(去左空格)
userInput.trimEnd(); // " 前端开发"(去右空格)
// 对比旧方法:
userInput.trim(); // "前端开发"(去两端空格)
动态模块加载:import()
(按需取快递)
按需加载,减少首屏资源加载,实现不阻塞页面渲染
// 点击按钮加载工具库
button.addEventListener("click", async () => {
const utils = await import("./utils.js");
utils.showModal(" 加载成功!");
});
Symbol身份证:Symbol.prototype.description
(查看标签)
用于获取Symbol的标识描述
const id = Symbol("用户唯一ID");
// 旧版无法获取描述
console.log(id.toString()); // "Symbol(用户唯一ID)"(字符串)
// ES10直接读取
console.log(id.description); // "用户唯一ID"(原始字符串)
无需错误变量的catch
(快递拒收单)
只需知道快递丢失,无需查看原因
// 旧写法(被迫接收错误单)
try {
receivePackage(); // 收快递
} catch (error) { // 必须声明error变量
logToSystem("快递丢失");
}
// ES10新写法(直接忽略原因)
try {
receivePackage();
} catch { // 无error变量 → 省掉无用参数
logToSystem("快递丢失");
}
以上就是ES10中新增的一些新特性,没有特别大的改动,更多是聚焦数据操作精细化