ES6(ES2015)是 JS 历史上最大的一次升级,此后每年一个小版本。核心几员:let 与 const 带来块级作用域,告别变量提升导致的诡异行为;箭头函数简化写法且不绑定自己的 this;解构赋值让取值一行搞定;模板字符串支持变量插值和多行文本;Promise 把异步从回调地狱里解放出来。ES2017 的 async/await 又在 Promise 之上给出同步式写法,异步代码读起来像顺序执行一样直白。
再往后还有 ES2020 的可选链 ?. 与空值合并 ??——访问深层嵌套数据再也不用一层层判断;以及对象展开 ...obj、数组展开 ...arr。现代浏览器对这些已全面支持,新项目应直接以 ES6+ 为基准语法,Babel 的存在只是为兼容老项目兜底。日常开发中 const 优先、let 次之、var 基本退场,已是社区公认的最佳实践。
// let / const 与块级作用域 { let a = 1; const b = 2; } // console.log(a); // ReferenceError // 箭头函数 + 解构 + 模板字符串 const users = [{ name: '甲', age: 20 }, { name: '乙', age: 25 }]; const names = users.map(({ name }) => `同学:${name}`); console.log(names); // ['同学:甲', '同学:乙'] // 展开运算符 const base = { x: 1, y: 2 }; const full = { ...base, z: 3 }; console.log(full); // { x: 1, y: 2, z: 3 } // 可选链与空值合并 const cfg = { server: { port: 8080 } }; const host = cfg.client?.host ?? 'localhost'; console.log(host); // localhost