news 2026/4/18 13:46:48

又到一年年终啦,我也浅浅总结下项目经常用到的ES7及以后版本的核心新特性,码友友们,这些你都知道吗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
又到一年年终啦,我也浅浅总结下项目经常用到的ES7及以后版本的核心新特性,码友友们,这些你都知道吗

自ES6(ECMAScript 2015)带来大规模语法革新后,ECMAScript标准开启了每年迭代的节奏,从ES7(2016)开始,每个版本都聚焦于实用小特性的补充与优化,逐步解决开发者在日常编码中的痛点。本文将从ES7出发,逐一拆解后续主流版本的核心新特性,结合代码示例说明其用法与优势,助力码友们快速上手现代JavaScript。

一、ES7(ECMAScript 2016)—— 轻量实用的特性补充

ES7作为ES6后的首个小版本更新,仅引入了两个核心特性,但均大幅提升了编码效率。

  1. Array.prototype.includes()数组包含检测

在此之前,检测数组是否包含某个元素需依赖indexOf(),但该方法存在明显缺陷:无法正确检测NaN,且返回索引值需手动判断是否为-1,可读性较差。includes()方法完美解决了这些问题,直接返回布尔值,语义更清晰。

// 基本用法
const arr = [1, 2, 3, NaN]; console.log(arr.includes(2)); // true console.log(arr.includes(NaN)); // true(indexOf会返回-1,无法检测)

// 可选参数:指定查找起始索引
console.log(arr.includes(1, 1)); // false(从索引1开始查找,无1)

优势:语义化更强,兼容NaN检测,代码更简洁直观。

  1. 指数运算符(**)-项目中很少用到

用于实现幂运算,替代传统的 Math.pow()方法,语法更简洁,支持连续运算。

// 基本幂运算
console.log(2 ** 3); // 8,等价于Math.pow(2, 3) console.log(5 ** 2); // 25

// 连续幂运算
console.log(2 ** 3 ** 2); // 512,等价于2^(3^2),而非(2^3)^2 console.log(Math.pow(Math.pow(2, 3), 2)); // 64(与连续运算优先级不同)

注意:指数运算符的优先级高于乘法和除法,低于括号,连续运算时从右往左执行。

二、ES8(ECMAScript 2017)—— 对象与异步能力增强

ES8围绕对象操作、字符串处理和异步编程进行了优化,其中async/await彻底改变了异步代码的编写方式。

  1. Object.values()Object.entries()

这两个方法简化了对象的遍历操作,分别用于获取对象的“值数组”和“键值对数组”,配合数组方法使用更高效。

const obj = { name: '张三', age: 24, gender: '男' };

// Object.values():获取值数组
console.log(Object.values(obj)); // ["张三", 24, "男"]

// Object.entries():获取键值对数组,可直接用于for…of遍历
for (const [key, value] of Object.entries(obj)) { console.log(${key}: ${value}); }
// 输出: // name: 张三 // age: 24 // gender: 男

2.String.prototype.padStart()/padEnd()

用于字符串补全,在字符串开头或结尾填充指定字符,直到达到目标长度,常用于格式化场景(如时间补零、编号对齐)。

// padStart(目标长度, 填充字符):开头补全
console.log('5'.padStart(2, '0')); // "05"(时间格式化常用) console.log('abc'.padStart(5, '-')); // "--abc"

// padEnd(目标长度, 填充字符):结尾补全
console.log('abc'.padEnd(5, 'x')); // "abcxx" console.log('123'.padEnd(6)); // "123 "(默认填充空格)

  1. async/await异步编程语法糖

基于Promise封装,将异步代码转化为“同步”写法,彻底告别回调地狱,可读性和可维护性大幅提升。

// 模拟异步请求
function fetchData(url) { return new Promise((resolve) => { setTimeout(() => { resolve(来自${url}的数据); }, 1000); }); }

// 使用async/await编写异步代码
async function getData() { try { const data1 = await fetchData('https://api.url1.com'); console.log(data1); // 1秒后输出:来自https://api.url1.com的数据 const data2 = await fetchData('https://api.url2.com'); console.log(data2); // 再等1秒输出:来自https://api.url2.com的数据 } catch (error) { console.error('请求失败:', error); } }

getData();

优势:错误捕获更直观(try/catch),代码逻辑与同步代码一致,便于调试。

三、ES9(ECMAScript 2018)—— 迭代与正则增强

  1. 异步迭代(for-await-of
    支持遍历异步数据源(如异步生成器、返回Promise的数组),自动等待每个异步操作完成后再继续遍历。

// 异步生成器
async function* asyncGenerator() { yield fetchData('url1'); yield fetchData('url2'); yield fetchData('url3'); }

// 异步迭代
async function processAsyncData() { for await (const data of asyncGenerator()) { console.log(data); // 依次输出3个请求的数据,每个间隔1秒 } }

  1. 对象展开/剩余属性(…)

ES6的扩展运算符仅支持数组,ES9将其扩展到对象,实现对象的浅拷贝、合并和属性过滤。

// 对象合并(浅拷贝)
const obj1 = { a: 1, b: 2 }; const obj2 = { ...obj1, c: 3, b: 4 }; // 重复属性后者覆盖前者 console.log(obj2); // { a: 1, b: 4, c: 3 }

// 剩余属性:提取未解构的属性
const { a, ...rest } = obj2; console.log(rest); // { b: 4, c: 3 }

  1. 正则表达式增强
  • 命名捕获组:给正则捕获组命名,通过 groups 属性获取对应值,可读性更强。

  • 反向断言:支持正向/反向断言,匹配指定内容前后的字符(不包含断言本身)。

// 命名捕获组:匹配日期(年-月-日)
const dateReg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = '2026-01-19'.match(dateReg); console.log(match.groups); // { year: "2026", month: "01", day: "19" }

// 反向断言:匹配¥后的数字(不包含¥)
const priceReg = /(?<=¥)\d+/; console.log('商品价格:¥99'.match(priceReg)[0]); // "99"

四、ES10(ECMAScript 2019)—— 数组与对象工具优化

  1. Array.prototype.flat()/flatMap()

用于数组扁平化,flat() 可指定扁平化深度,flatMap() 等价于先执行map() 再执行 flat(1)。

// flat():数组扁平化
const nestedArr = [1, [2, [3, 4], 5]]; console.log(nestedArr.flat()); // [1, 2, [3, 4], 5](默认深度1) console.log(nestedArr.flat(2)); // [1, 2, 3, 4, 5](深度2,完全扁平化)

// flatMap():map+flat(1)
const arr = [1, 2, 3]; console.log(arr.flatMap(x => [x, x*2])); // [1, 2, 2, 4, 3, 6]

  1. Object.fromEntries()

将键值对数组转为对象,是Object.entries()的逆操作,常用于数据格式转换。

const entries = [['name', '李四'], ['age', 28], ['gender', '女']]; const obj = Object.fromEntries(entries); console.log(obj); // { name: "李四", age: 28, gender: "女" }

// 实际场景:将Map转为对象
const map = new Map(entries); console.log(Object.fromEntries(map)); // 同上

五、ES11(ECMAScript 2020)—— 安全访问与性能提升

  1. 可选链运算符(?.

解决嵌套对象属性访问时的“Cannot read property 'x' of undefined”错误,当中间属性为null/undefined时,直接返回undefined

const user = { name: '王五', address: { city: '北京' } };

// 传统写法:需层层判断
const city1 = user && user.address && user.address.city;

// 可选链写法:简洁安全
const city2 = user?.address?.city;
const zipCode = user?.address?.zipCode; // undefined(无该属性,不报错)

  1. 空值合并运算符(??)

用于设置默认值,仅当左侧值为null/undefined时才返回右侧值,区别于 ||(会忽略0、‘’、false等假值)。

// 空值合并运算符
const score1 = 0 ?? 60; // 0(左侧为0,非null/undefined,返回本身)
const score2 = null ?? 60; // 60(左侧为null,返回右侧)

// 对比逻辑或运算符
const score3 = 0 || 60; // 60(0被视为假值,返回右侧)

六、总结与兼容建议

ES7及以后的版本迭代,核心是“实用化”和“简洁化”,通过语法糖减少冗余代码,提升开发效率,同时解决异步编程、数据处理等场景的痛点。这些特性已被现代浏览器和Node.js广泛支持,实际开发中可通过以下方式保障兼容:

  1. 使用Babel转译:将高版本ES语法转为ES5,兼容旧环境。

  2. 借助Polyfill:如core-js,补充低版本环境缺失的API。

  3. 针对性兼容:对无需兼容旧浏览器的项目(如内部系统),可直接使用最新特性。

掌握这些新特性,能让我们的JavaScript代码更简洁、高效、易维护,紧跟前端技术迭代的步伐。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:34:38

深度剖析eBPF技术原理及其在微服务网关性能优化中的实践应用

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

作者头像 李华
网站建设 2026/4/18 6:34:52

三菱FX5U实现4层电梯升降控制:PLC与触摸屏程序全解析

三菱FX5U控制的4层电梯升降&#xff0c;系统为FX5UFX5-40SSC-S简单运控模块。 包含一个PLC程序和触摸屏程序。 程序有详细的注释。一、引言 在自动化控制领域&#xff0c;电梯控制是一个经典且应用广泛的场景。本文将介绍如何使用三菱FX5U系列PLC搭配FX5 - 40SSC - S简单运控模…

作者头像 李华
网站建设 2026/4/18 7:28:04

Tomcat架构与核心组件面试题

基础级别 1. 什么是Apache Tomcat?它的主要作用是什么? 答案: Apache Tomcat是一个开源的Java Servlet容器和Web服务器,由Apache软件基金会开发和维护。它实现了Java Servlet、JavaServer Pages (JSP)、Java Expression Language和Java WebSocket等Java EE规范。 主要作用: 作…

作者头像 李华
网站建设 2026/4/18 10:08:40

SpringMVC深度解析从基础架构到实战应用的全方位指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…

作者头像 李华
网站建设 2026/4/18 10:51:39

双组分精准快检,汽修年检利器:MEXA-324M汽车尾气测量仪项目实战全解

双组分精准快检&#xff0c;汽修年检利器&#xff1a;MEXA-324M汽车尾气测量仪项目实战全解在汽车维修保养与年检行业对尾气检测效率和精准度要求日益提升的背景下&#xff0c;快速、可靠、易用的CO/HC双组分尾气测量已成为汽修厂故障诊断、排放合规性检测与日常维护的核心工具…

作者头像 李华