Skip to content

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)
内置SymbolSymbol.iterator 定义对象遍历规则obj[Symbol.iterator]()

注意事项

  • Symbol值不会出现在Object.keys()等枚举中
  • Symbol.for("key") 会复用已注册的Symbol

知识回顾

  1. 解构赋值核心
    • 数组/对象直接提取值
    • 默认值语法 variable = defaultValue
    • 嵌套解构:const { user: { id } } = data;
  2. Symbol 特点
    • 唯一性:Symbol("key") !== Symbol("key")
    • 作为对象私有属性键
  3. 工具库作用
    • lodash:提供实用函数减少重复代码
    • es-toolkit:ES特性填充与模块化辅助
  4. 陷阱提醒
    • 解构变量未声明会报错
    • Symbol属性无法通过常规枚举获取
    • 工具库需按需加载避免体积膨胀

课后练习

  1. (单选)以下哪种是正确的对象解构写法?

    • A. const name = { user.name };
    • B. { const name, age } = user;
    • C. const { name, age } = user;
    • D. const name, age = user;
  2. (填空)创建Symbol值的语法是:______("描述")

  3. (代码纠错)修复以下解构代码:

    javascript
    const [a, b] = [1]; // 错误:b未被赋值
    console.log(b);     // NaN
  4. (操作题)使用lodash简化以下代码:

    javascript
    // 原始代码(未使用工具库)
    function getSafe(data, path) {
      return path.split(".").reduce((obj, key) => obj?.[key], data);
    }
    // 用lodash的_.get()实现相同功能

备注: (1) 通过对比传统写法与ES特性代码,突出简洁性 (2) 强调Symbol在构建“私有属性”时的作用 (3) 工具库部分需提供安装命令和典型用例

Built by Vitepress | Apache 2.0 Licensed