极简三分钟ES6 - ES10中一些其他扩展

42 阅读2分钟

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中新增的一些新特性,没有特别大的改动,更多是聚焦数据操作精细化