ES8(ECMAScript 2017)聚焦提升开发效率与异步编程体验,核心新增async/await、Object.values()与Object.entries()、padStart()/padEnd()等实用特性,均已稳定支持主流环境。

ES8(即 ECMAScript 2017)是 JavaScript 在 2017 年发布的标准版本,它不是一次颠覆性升级,而是聚焦于提升开发效率、增强异步编程体验和补全对象/字符串等基础操作的能力。它的新增功能大多已稳定支持主流浏览器和 Node.js(v8.0+),日常开发中可直接使用。
async/await 异步编程更简洁
这是 ES8 最广为人知的特性。它让 Promise 链式调用变成接近同步代码的写法,大幅降低理解与维护成本。
- async 函数自动返回 Promise:即使函数体里没有 await,返回值也会被 Promise.resolve() 包装。
- await 只能在 async 函数内使用:它会暂停函数执行,等待 Promise settled(fulfilled 或 rejected),再继续向下执行。
- 错误处理推荐用 try/catch:比链式 .catch() 更直观,能统一捕获 await 前后抛出的异常(如 fetch 失败、JSON 解析错误等)。
Object.values() 和 Object.entries()
这两个方法补全了 Object.keys() 的能力,让对象遍历和转换更自然。
- Object.values(obj):返回对象所有可枚举属性值组成的数组,顺序与 for...in 一致。对纯数据对象(如配置、API 响应)做批量处理很实用。
-
Object.entries(obj):返回键值对二维数组,例如
[['a', 1], ['b', 2]]。常用于快速转为 Map:new Map(Object.entries(obj)),或配合 for...of 遍历。 - 注意:它们只处理对象自身、可枚举、非 Symbol 的属性,不包括原型链上的属性。
字符串填充:padStart() 和 padEnd()
用于格式化字符串长度,比如生成固定位数的编号、对齐日志输出、补零时间显示等。
技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
立即学习“Java免费学习笔记(深入)”;
-
'3'.padStart(2, '0') →
'03';'hello'.padEnd(8, '_') →'hello___' - 第二个参数可以是任意字符串,不限于单字符;如果填充长度不足目标长度,原字符串不变。
- 相比手动拼接或 slice + repeat,语义清晰、不易出错。
其他值得关注的 ES8 功能
这些虽不如前三项高频,但在特定场景下很有价值:
- Object.getOwnPropertyDescriptors(obj):获取对象每个属性的完整描述符(value、writable、enumerable、configurable 等),是安全克隆对象、实现 mixin 或代理逻辑的重要基础。
- 函数参数末尾允许逗号(trailing comma):在多行函数调用或定义中加逗号,便于 Git 提交时减少无意义 diff,也方便后续增删参数。
-
Array.prototype.includes():虽然常被误认为 ES7,但它确实是 ES8 正式纳入的;比
indexOf !== -1更语义化、且能正确识别 NaN。
ES8 没有引入革命性语法,但每项新增都直击日常开发中的小痛点。合理使用这些 API,能让代码更短、更稳、更易读。










