面试题库 词条目录
前端Wiki/面试题库/JavaScript/JS 进阶题

ES6+ 重点语法

ES6+ 考点最密集的语法:let / const 块级作用域、箭头函数、模板字符串、解构赋值与默认参数、展开运算符(...)、class 语法糖、Symbol / BigInt、Map / Set、Proxy / Reflect、可选链(?.)与空值合并(??)、迭代器(for...of)。

回答策略是“对比着讲”:箭头函数 vs 普通函数(this / arguments / new);Map vs Object(键可任意类型、键有序、size 直接取);Set vs 数组(自动去重、查找 O(1));Proxy vs Object.defineProperty(Proxy 代理整个对象、能监听新增删除与数组下标 —— 这正是 Vue3 换掉 defineProperty 的原因)。

  • 常考语法:解构 / 默认值 / 展开 / class / 可选链 / 空值合并
  • Map 键可任意类型且有序、size 直接取;Set 天然去重、查找 O(1)
  • Proxy 能拦截增删与数组变化,Vue3 因此弃用 defineProperty
JS
// 解构与默认值
const { name = '匿名', age = 18 } = { name: "小明" };
const [first, ...rest] = [1, 2, 3, 4];
console.log(name, age, first, rest);          // 小明 18 1 [2,3,4]

// 可选链 + 空值合并:深层取值的救星
const user = { addr: { city: '北京' } };
console.log(user?.addr?.city ?? '未知');      // 北京(链断了取默认值)

// Map / Set
const m = new Map([[{ id: 1 }, '对象做键']]);
const s = new Set([1, 2, 2, 3]);
console.log(s.size, [...s]);                  // 3 [1,2,3] —— 去重

// class:构造函数 + 原型方法的语法糖
class Animal {
  #weight = 0;                                // ES2022 私有字段
  constructor(name) { this.name = name; }
  speak() { return this.name + ' 叫了一声'; }   // 模板字符串也可
  static create(n) { return new Animal(n); }   // 静态方法
}
console.log(Animal.create('猫').speak());

// Proxy:数组与新增属性都能拦截(Vue3 响应式基础)
const arr = new Proxy([], {
  set(target, key, val) {
    console.log('设置', key, '=', val);
    target[key] = val; return true;
  }
});
arr.push(1);                                  // 设置 0 = 1;设置 length = 1
本节要点ES6+ 主线:作用域私有化(let / class / #字段)、异步语法糖、集合类型(Map/Set)、Proxy 代理。