ES6(ECMAScript 2015)新增特性概览

ES6(ECMAScript 2015)新增特性概览

ES6 通常指 ECMAScript 2015,是 JavaScript 一次大规模语法与内置能力更新。下文按类别归纳常用新增点(部分特性在后续年度标准中有小幅修订或扩展,但日常使用仍常统称「ES6+」)。

变量声明:letconst

  • let:块级作用域,不存在变量提升导致的「穿透」问题,适合循环计数、局部临时变量。
  • const:绑定只读引用;对象、数组本身不可重新赋值,但内容仍可修改(除非配合 Object.freeze 等)。
const PI = 3.14;
let i = 0;
for (let j = 0; j < 3; j++) {
  /* j 仅块内有效 */
}

箭头函数

语法更短,不绑定自己的 this,继承外层词法 this,适合回调。

const add = (a, b) => a + b;
arr.map((x) => x * 2);

注意:箭头函数不能作构造函数,也没有 prototype

模板字符串

用反引号 ` 包裹,支持换行${} 插值

const msg = `你好,${name}
第二行`;

解构赋值

数组与对象可按结构「拆开」取值,常与函数参数、返回值配合。

const [a, b] = [1, 2];
const { id, name } = user;
const { x = 0 } = point; // 默认值

默认参数、剩余参数与扩展运算符

function fn(a = 1, b = 2) {}
function sum(first, ...rest) {
  return rest.reduce((s, n) => s + n, first);
}
const arr2 = [0, ...arr1, 3];
const obj2 = { ...obj1, c: 3 };

对象字面量增强

  • 属性简写:{ name } 等价于 { name: name }
  • 方法简写:{ say() {} }
  • 计算属性名:{ [key]: value }

class

基于原型的语法糖,支持 constructorextendssuperstatic

class Animal {
  constructor(name) {
    this.name = name;
  }
}
class Dog extends Animal {
  bark() {
    console.log(this.name);
  }
}

模块化 import / export

// a.js
export const x = 1;
export default function () {}

// b.js
import fn, { x } from "./a.js";

具体解析规则由打包器 / 浏览器模块环境决定。

Promise

表示异步最终结果,链式 then / catch / finally,静态方法 Promise.allPromise.race 等。

fetch(url)
  .then((res) => res.json())
  .catch(console.error);

async/awaitES2017 标准化,常一起使用,用于以同步风格写 Promise。

新集合类型:MapSet

  • Map:任意类型键,按插入顺序迭代。
  • Set:值唯一,去重方便。

Symbol

唯一符号,常用于不冲突的对象属性键、部分内置行为钩子(如 Symbol.iterator)。

迭代与 for...of

可迭代对象(含数组、字符串、MapSet 等)可用 for...of 遍历值;与 for...in(遍历可枚举属性键)不同。

数组扩展

  • Array.from:类数组或可迭代 → 真数组
  • Array.of:创建数组
  • find / findIndex:按条件查找元素
  • fill / copyWithin:填充与拷贝片段
  • includes:是否包含某值(比 indexOf 更适合 NaN 判断场景)

字符串扩展

  • includes / startsWith / endsWith
  • repeat(n):重复字符串

对象静态方法

  • Object.assign:浅拷贝、合并属性(现更常用展开运算符 {...a, ...b}
  • Object.keys / values / entries(部分在 ES2017 完善)

数值

  • Number.isFinite / Number.isNaN 等更安全的判断
  • Number.EPSILON
  • Math 新增方法truncsigncbrt

Proxy 与 Reflect(进阶)

Proxy 可拦截对象读写等操作;Reflect 提供与 Proxy 对应的一套默认行为 API。多用于框架、工具库。


小结

类别代表特性
语法let/const、箭头函数、模板字符串、解构、类、模块
函数默认参数、剩余/扩展
异步Promise(+ 后续 async/await
内置对象MapSetSymbol、数组/字符串新方法
元编程ProxyReflect

实际项目通常用 Babel 等工具将新语法编译到目标环境,或按浏览器 / Node 版本选择可用特性。查阅标准草案与兼容表可使用 MDNopen in new windowCan I useopen in new window

Last Updated 4/9/2026, 6:16:02 AM