又到一年年终啦,我也浅浅总结下项目经常用到的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代码更简洁、高效、易维护,紧跟前端技术迭代的步伐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1184326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java开发】gRPC协议原理剖析及其在微服务架构中的应用

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

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

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

React Vue 如何让 Cookie 逻辑“秒变优雅”?

你是否还在为 document.cookie 的手动操作头疼&#xff1f;设置一个登录 token&#xff0c;还得手动处理编码、路径、过期时间&#xff0c;一不小心就触发跨域错误或 XSS 风险&#xff1f;更糟的是&#xff0c;每次写代码都像在玩“cookie 拼图”——要么漏了 HttpOnly&#xf…

GBase8s集合类型之关联数组简介

GBase 8s兼容oracle的PL/SQL编程语言&#xff0c;PL/SQL 语法需要显式设置环境变量SQLMODE为’ORACLE’后才能生效&#xff0c;默认情况下8s的SQLMODE为’GBASE’&#xff0c;此时不支持 PL/SQL 语法。本文将介绍GBase 8s兼容oracle模式中的关联数组类型&#xff0c;包括它们的…

GBase 8a 参数gcluster_shrink_to_rebalance使用介绍

参数功能控制shrink操作使用rebalance方式的开关。 取值 0&#xff1a;关闭 shrink to rebalance 功能&#xff1b; 取值 1&#xff1a; 打开 shrink to rebalance 功能&#xff1b; 默认取值&#xff1a;1。原理特性该参数为862-Build43后的新功能。打开该参数&#xff0c;执行…

打工人救星!用doocs md写公众号必搭cpolar,再也不用卡局域网里改稿了

文章目录1 项目 doocs/md 介绍2 安装Nodejs环境2.1 下载Nodejs安装程序2.2 安装Nodejs程序2.3 验证Nodejs是否安装2.4 设置国内淘宝镜像源3 下载本地部署doocs/md项目3.1 将项目下载至本地3.2 解压doocs/md项目3.3 安装依赖和启动doocs/md项目4 将网站穿透至公网&#xff08;cp…

帝国CMS搭建全攻略:从安装到优化

帝国CMS搭建指南系统环境准备确保服务器环境满足以下要求&#xff1a;PHP版本5.6及以上&#xff0c;MySQL数据库5.0及以上&#xff0c;推荐使用Apache或Nginx作为Web服务器。Windows系统建议使用WAMP/LAMP集成环境&#xff0c;Linux系统需提前安装PHPMySQL环境组件。下载与安装…

GBase 8c数据库磁盘故障定位技术分享

南大通用GBase 8c数据库常见的磁盘故障是磁盘空间不足、磁盘出现坏块、磁盘未挂载等。部分磁盘故障会导致文件系统损坏&#xff0c;例如磁盘未挂载&#xff0c;数据库管理自动定期执行磁盘检测时会识别故障并将实例停止&#xff0c;查看数据库状态时对应实例状态异常&#xff1…

852-017500-003-6-C220ASSEMBLY CHASSIS 14 英寸屏幕LAM

产品概述该部件为LAM Research&#xff08;泛林半导体&#xff09;生产的设备组件&#xff0c;型号为852-017500-003-6-C220&#xff0c;属于14英寸屏幕的底盘组装件&#xff08;Chassis Assembly&#xff09;。LAM Research是全球领先的半导体制造设备供应商&#xff0c;此类组…

Windows版本的Dify平台搭建

Windows版本基于Docker的Dify平台搭建 1:名词解释 1.1:Hyper-V Hyper-V 是微软提供的 **Type-1&#xff08;裸机型&#xff09;虚拟化技术**&#xff0c;可在一台物理计算机上同时运行多个相互隔离的虚拟机。每个虚拟机拥有独立的操作系统和虚拟硬件资源&#xff0c;通过虚拟…

Sanyo Denki PU0A030EMA1S00 伺服放大器

Sanyo Denki PU0A030EMA1S00 伺服放大器概述Sanyo Denki&#xff08;山洋电气&#xff09;PU0A030EMA1S00 是一款高性能伺服放大器&#xff0c;专为精密运动控制应用设计。该型号通常用于工业自动化、机器人、CNC机床等场景&#xff0c;支持与配套的伺服电机协同工作&#xff0…

便携式半实物测试平台 ETest_PT

1&#xff09;产品简介 ETest_PT是一款便携嵌入式系统测试平台&#xff0c;由软件和硬件两部分组成&#xff0c;软件采用ETest&#xff0c;硬件包括测试主机、USB接口设备&#xff08;CAN、TCP/UDP、RS232/422/485、AD/DA/DI/DO、ARINC429、1553B、1394B、FC等&#xff09;。 …

2026年Highcharts迎来系列更新| V12.5 正式发布

更新日志见官网&#xff1a;https://www.highcharts.com/changelog/ 2026年1月12日 — Highcharts团队正式发布v12.5.0版本&#xff0c;为核心产品线带来多项重要更新。 本次发布最值得关注的亮点包括树状图&#xff08;Dendrogram&#xff09;的正式支持、Highcharts Grid 2…

GBase 8c数据库运维——常见故障定位手段 分享

1.操作系统故障定位手段查询状态时&#xff0c;显示一个节点上所有实例都不正常时&#xff0c;可能是操作系统发生了故障。 可以通过如下方法确定操作系统是否存在问题&#xff1a;通过 SSH 或者其它远程登录工具登录该节点。如果连接失败&#xff0c;请尝试通过 ping 发包检查…

Flutter 又迎大坑修改?iOS 26 键盘变化可能带来大量底层改动

又是一个小问题可能带来的大改动&#xff0c;感觉官方在评估的时候&#xff0c;有点过分细节了。 这个问题来自去年底的 #179482 issue &#xff0c;Flutter 在 iOS 26 上&#xff0c;某些场景会因为出现半透明键盘&#xff0c;而页面底下本来应该被键盘遮挡的 Widget&#xf…

3C电子电爪的“心脏”:满足各行各业高精度需求的电爪厂家推荐 - 品牌2025

在高端制造迈向智能化、柔性化的新阶段,电动夹爪作为机器人末端执行器的核心组件,正成为决定产线效率与良率的关键。尤其在3C电子、半导体、新能源等对微米级操作精度要求严苛的行业,传统气动方案已难以满足柔性抓取…

易语言开发从入门到精通:26+27章实战复盘·全栈知识体系地图·终身学习资源库·个人成长与中文编程传承指南

易语言开发从入门到精通&#xff1a;2627章实战复盘全栈知识体系地图终身学习资源库个人成长与中文编程传承指南 &#x1f504;&#x1f5fa;️&#x1f4da; 1.28.1 学习目标 &#x1f3af; 作为《易语言开发从入门到精通》的全书系统性收尾总结升华终身学习开篇&#xff0c;本…

文献阅读6

文献阅读66. Disscusion 6.1. Ablation study消融实验从两部分展开:1)关于 DBPM 组件的消融(Ablation Study about DBPM)2)关于训练策略的消融(Ablation Study about Training Strategy)1)关于 DBPM 组件的消融…

企业微信API开发:外部群主动推送场景

​ QiWe开放平台 开发者名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景 官方站点&#xff1a;https://www.qiweapi.com 团队定位&#xff1a;专注企微API生…

基于 API 体系的外部群消息推送“避坑”指南

​ QiWe开放平台 开发者名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景 官方站点&#xff1a;https://www.qiweapi.com 团队定位&#xff1a;专注企微API生…