C17. ES 新特性
7.1. 🌟 解构赋值省略不必要的中间变量
解构赋值(Destructuring)直接从数组或对象中提取值,减少临时变量声明。
javascript
// 传统写法(需要中间变量)
const user = { name: "Alice", age: 30 };
const name = user.name;
const age = user.age;
// 解构赋值(一步到位)
const { name, age } = user; // 等价于上面两行
7.1.1. ⭐ 数组解构与默认值
javascript
const [first, second = "默认值"] = ["苹果", "香蕉"];
console.log(first); // 苹果
console.log(second); // 香蕉
const [,,third] = ["","","橙子"]; // 取第三个元素
console.log(third); // 橙子
先锋用法
- 可交换变量:
[a, b] = [b, a]
- 解构对象嵌套:
const { address: { city } } = user;
7.2. ⭐ Symbol 完善了 JavaScript 的语言特性
Symbol 是 ES6 引入的第七种数据类型,用于创建唯一且不可变的标识符。
javascript
const sym1 = Symbol("描述"); // 唯一的Symbol值
const sym2 = Symbol("描述"); // 与sym1不同
const obj = {
[sym1]: "私有属性", // 用Symbol作为键
publicProp: "公共属性"
};
console.log(obj[sym1]); // "私有属性"
7.2.1. Symbol 的特殊能力
特性 | 作用 | 示例 |
---|---|---|
Symbol.keyFor() | 通过全局注册表获取Symbol描述符 | Symbol.keyFor(sym) |
内置Symbol | 如 Symbol.iterator 定义对象遍历规则 | obj[Symbol.iterator]() |
注意事项
- Symbol值不会出现在
Object.keys()
等枚举中 Symbol.for("key")
会复用已注册的Symbol
知识回顾
- 解构赋值核心:
- 数组/对象直接提取值
- 默认值语法
variable = defaultValue
- 嵌套解构:
const { user: { id } } = data;
- Symbol 特点:
- 唯一性:
Symbol("key") !== Symbol("key")
- 作为对象私有属性键
- 唯一性:
- 工具库作用:
- lodash:提供实用函数减少重复代码
- es-toolkit:ES特性填充与模块化辅助
- 陷阱提醒:
- 解构变量未声明会报错
- Symbol属性无法通过常规枚举获取
- 工具库需按需加载避免体积膨胀
课后练习
(单选)以下哪种是正确的对象解构写法?
- A.
const name = { user.name };
- B.
{ const name, age } = user;
- C.
const { name, age } = user;
- D.
const name, age = user;
- A.
(填空)创建Symbol值的语法是:
______("描述")
。(代码纠错)修复以下解构代码:
javascriptconst [a, b] = [1]; // 错误:b未被赋值 console.log(b); // NaN
(操作题)使用lodash简化以下代码:
javascript// 原始代码(未使用工具库) function getSafe(data, path) { return path.split(".").reduce((obj, key) => obj?.[key], data); } // 用lodash的_.get()实现相同功能
备注: (1) 通过对比传统写法与ES特性代码,突出简洁性 (2) 强调Symbol在构建“私有属性”时的作用 (3) 工具库部分需提供安装命令和典型用例