面试题:️ES6 有哪些新特性?

ES6(ECMAScript 2015)是 JavaScript 语言历史上一次重大的更新,引入了大量现代化的语法和特性,极大地提升了语言的表达能力、开发效率和代码可维护性。以下是 ES6 的主要新特性,按类别进行归纳:


一、 变量与作用域

  1. letconst
    • let:声明块级作用域的变量,解决了 var 的变量提升(Hoisting)和作用域混乱问题。
    • const:声明块级作用域的常量,一旦赋值后不能重新赋值(对于对象/数组,其引用不能变,但内部属性/元素可以修改)。

二、 函数增强

  1. 箭头函数 (Arrow Functions) =>
    • 提供更简洁的函数语法。
    • 不绑定自己的 this,其 this 继承自外层作用域(词法绑定),解决了回调函数中 this 指向问题。
    • 没有 arguments 对象。
    • 不能用作构造函数(不能 new 调用)。
  2. 函数参数默认值 (Default Parameters)
    • 允许在函数定义时为参数指定默认值。
    function greet(name = 'Guest') { console.log(`Hello, ${name}!`); }
  3. 剩余参数 (Rest Parameters) ...
    • 将函数的多个参数收集到一个数组中。
    function sum(...numbers) { return numbers.reduce((a, b) => a + b, 0); }
  4. 扩展运算符 (Spread Operator) ...
    • 将数组或可迭代对象“展开”为多个元素,常用于数组合并、函数参数传递、对象合并等。

三、 对象与类

  1. 对象字面量的增强
    • 属性简写const name = 'Alice'; const obj = { name }; // 等价于 { name: name }
    • 方法简写const obj = { method() { ... } }; // 等价于 { method: function() { ... } }
    • 计算属性名const key = 'dynamic'; const obj = { [key]: 'value' };
  2. 解构赋值 (Destructuring Assignment)
    • 从数组或对象中提取值,并赋值给变量。
  3. class 关键字
    • 提供了基于原型的“类”的语法糖,使面向对象编程更直观。包含 constructor 构造函数、extends 继承、super 调用父类等。
  4. Symbol 数据类型
    • 一种新的原始数据类型,用于创建唯一且不重复的值。
    • 常用于作为对象的唯一属性名,避免命名冲突,或定义知名 Symbol(如 Symbol.iterator)来自定义对象行为。

四、 模块化

  1. ES Module (ESM)
    • 原生的模块系统,使用 importexport 语法。
    • 支持静态分析、Tree Shaking 等优化。
    • 与 CommonJS (require/module.exports) 并存,但 ESM 是官方标准和未来方向。

五、 数据结构

  1. Map
    • 键值对的集合,键可以是任何类型(包括对象、函数),而不仅仅是字符串。
    • 保持键值对的插入顺序。
  2. Set
    • 存储唯一值的集合,自动去重。
    • 常用于数组去重:[...new Set([1, 2, 2, 3])] // [1, 2, 3]
  3. WeakMapWeakSet
    • 键(WeakMap)或值(WeakSet)是弱引用,不会阻止垃圾回收。
    • 适用于存储私有数据或元信息,避免内存泄漏。

六、 异步编程

  1. Promise
    • 虽然 Promise 在 ES6 之前已有 Polyfill,但 ES6 将其纳入标准。
    • 提供了一种更优雅的方式处理异步操作,解决“回调地狱”(Callback Hell)问题。
    • 支持 .then().catch().finally() 链式调用。

七、 其他重要特性

  1. 模板字符串 (Template Literals)
    • 使用反引号 ` 定义,支持多行字符串和字符串插值。
  2. for...of 循环
    • 用于遍历可迭代对象(如数组、字符串、Map、Set、arguments 等)。
    • for...in(遍历对象的可枚举属性)不同。
  3. 迭代器 (Iterators) 和生成器 (Generators) function*
    • 迭代器:为对象定义 @@iterator 方法(通常通过 Symbol.iterator),使其可被 for...of 遍历。
    • 生成器:一种特殊的函数,可以暂停和恢复执行,返回一个迭代器对象。是实现异步编程(如 co 库)的基础。
  4. Proxy
    • 用于创建一个对象的代理,可以拦截并自定义对象的基本操作(如属性读取、赋值、函数调用等)。
    • 是实现响应式系统(如 Vue 3)的核心技术。
  5. Reflect
    • 提供了一组用于操作对象的静态方法,通常与 Proxy 配合使用,提供更一致的 API。
  6. 模块的 export default 和命名导出
    • 支持一个模块有多个命名导出 (export const foo = ...) 和一个默认导出 (export default bar)。

总结

ES6 的新特性极大地丰富了 JavaScript 的语言能力,使其从一个主要用于网页脚本的语言,转变为一门能够构建大型复杂应用的现代编程语言。这些特性涵盖了变量声明、函数、对象、类、模块、数据结构、异步处理等多个方面,是现代 JavaScript 开发的基石。掌握这些特性是成为一名合格前端或 Node.js 开发者的必备条件。

THE END
喜欢就支持一下吧
点赞5 分享