ES6(ECMAScript 2015)新增特性概览
ES6(ECMAScript 2015)新增特性概览
ES6 通常指 ECMAScript 2015,是 JavaScript 一次大规模语法与内置能力更新。下文按类别归纳常用新增点(部分特性在后续年度标准中有小幅修订或扩展,但日常使用仍常统称「ES6+」)。
变量声明:let 与 const
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
基于原型的语法糖,支持 constructor、extends、super、static。
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.all、Promise.race 等。
fetch(url)
.then((res) => res.json())
.catch(console.error);
async/await在 ES2017 标准化,常一起使用,用于以同步风格写 Promise。
新集合类型:Map 与 Set
Map:任意类型键,按插入顺序迭代。Set:值唯一,去重方便。
Symbol
唯一符号,常用于不冲突的对象属性键、部分内置行为钩子(如 Symbol.iterator)。
迭代与 for...of
可迭代对象(含数组、字符串、Map、Set 等)可用 for...of 遍历值;与 for...in(遍历可枚举属性键)不同。
数组扩展
Array.from:类数组或可迭代 → 真数组Array.of:创建数组find/findIndex:按条件查找元素fill/copyWithin:填充与拷贝片段includes:是否包含某值(比indexOf更适合NaN判断场景)
字符串扩展
includes/startsWith/endsWithrepeat(n):重复字符串
对象静态方法
Object.assign:浅拷贝、合并属性(现更常用展开运算符{...a, ...b})Object.keys/values/entries(部分在 ES2017 完善)
数值
Number.isFinite/Number.isNaN等更安全的判断Number.EPSILONMath新增方法:trunc、sign、cbrt等
Proxy 与 Reflect(进阶)
Proxy 可拦截对象读写等操作;Reflect 提供与 Proxy 对应的一套默认行为 API。多用于框架、工具库。
小结
| 类别 | 代表特性 |
|---|---|
| 语法 | let/const、箭头函数、模板字符串、解构、类、模块 |
| 函数 | 默认参数、剩余/扩展 |
| 异步 | Promise(+ 后续 async/await) |
| 内置对象 | Map、Set、Symbol、数组/字符串新方法 |
| 元编程 | Proxy、Reflect |
实际项目通常用 Babel 等工具将新语法编译到目标环境,或按浏览器 / Node 版本选择可用特性。查阅标准草案与兼容表可使用 MDN 与 Can I use。
