- Javascript 基础教程
- Javascript - 首页
- JavaScript - 路线图
- JavaScript - 概述
- JavaScript - 特性
- JavaScript - 启用
- JavaScript - 位置
- JavaScript - 语法
- JavaScript - Hello World
- JavaScript - Console.log()
- JavaScript - 注释
- JavaScript - 变量
- JavaScript - let 语句
- JavaScript - 常量
- JavaScript - 数据类型
- JavaScript - 类型转换
- JavaScript - 严格模式
- JavaScript - 保留关键字
- JavaScript 运算符
- JavaScript - 运算符
- JavaScript - 算术运算符
- JavaScript - 比较运算符
- JavaScript - 逻辑运算符
- JavaScript - 位运算符
- JavaScript - 赋值运算符
- JavaScript - 条件运算符
- JavaScript - typeof 运算符
- JavaScript - 空值合并运算符
- JavaScript - delete 运算符
- JavaScript - 逗号运算符
- JavaScript - 分组运算符
- JavaScript - yield 运算符
- JavaScript - 展开运算符
- JavaScript - 指数运算符
- JavaScript - 运算符优先级
- JavaScript 控制流
- JavaScript - if...else
- JavaScript - while 循环
- JavaScript - for 循环
- JavaScript - for...in
- Javascript - for...of
- JavaScript - 循环控制
- JavaScript - break 语句
- JavaScript - continue 语句
- JavaScript - switch case
- JavaScript - 用户自定义迭代器
- JavaScript 函数
- JavaScript - 函数
- JavaScript - 函数表达式
- JavaScript - 函数参数
- JavaScript - 默认参数
- JavaScript - Function() 构造函数
- JavaScript - 函数提升
- JavaScript - 自执行函数
- JavaScript - 箭头函数
- JavaScript - 函数调用
- JavaScript - Function call()
- JavaScript - Function apply()
- JavaScript - Function bind()
- JavaScript - 闭包
- JavaScript - 变量作用域
- JavaScript - 全局变量
- JavaScript - 智能函数参数
- JavaScript 对象
- JavaScript - Number
- JavaScript - Boolean
- JavaScript - String
- JavaScript - Array
- JavaScript - Date
- JavaScript - DataView
- JavaScript - Handler
- JavaScript - Math
- JavaScript - RegExp
- JavaScript - Symbol
- JavaScript - Set
- JavaScript - WeakSet
- JavaScript - Map
- JavaScript - WeakMap
- JavaScript - 可迭代对象
- JavaScript - Reflect
- JavaScript - TypedArray
- JavaScript - 模板字面量
- JavaScript - 标签模板
- 面向对象 JavaScript
- JavaScript - 对象
- JavaScript - 类
- JavaScript - 对象属性
- JavaScript - 对象方法
- JavaScript - 静态方法
- JavaScript - 显示对象
- JavaScript - 对象访问器
- JavaScript - 对象构造函数
- JavaScript - 原生原型
- JavaScript - ES5 对象方法
- JavaScript - 封装
- JavaScript - 继承
- JavaScript - 抽象
- JavaScript - 多态
- JavaScript - 解构赋值
- JavaScript - 对象解构
- JavaScript - 数组解构
- JavaScript - 嵌套解构
- JavaScript - 可选链
- JavaScript - 全局对象
- JavaScript - Mixins
- JavaScript - 代理 (Proxies)
- JavaScript 版本
- JavaScript - 历史
- JavaScript - 版本
- JavaScript - ES5
- JavaScript - ES6
- ECMAScript 2016
- ECMAScript 2017
- ECMAScript 2018
- ECMAScript 2019
- ECMAScript 2020
- ECMAScript 2021
- ECMAScript 2022
- JavaScript 异步编程
- JavaScript - 异步编程
- JavaScript - 回调函数
- JavaScript - Promise
- JavaScript - Async/Await
- JavaScript - 微任务
- JavaScript - Promise 化
- JavaScript - Promise 链式调用
- JavaScript - 定时事件
- JavaScript - setTimeout()
- JavaScript - setInterval()
- JavaScript Cookie
- JavaScript - Cookie
- JavaScript - Cookie 属性
- JavaScript - 删除 Cookie
- JavaScript 浏览器 BOM
- JavaScript - 浏览器对象模型
- JavaScript - Window 对象
- JavaScript - Document 对象
- JavaScript - Screen 对象
- JavaScript - History 对象
- JavaScript - Navigator 对象
- JavaScript - Location 对象
- JavaScript - Console 对象
- JavaScript Web APIs
- JavaScript - Web API
- JavaScript - History API
- JavaScript - Storage API
- JavaScript - Forms API
- JavaScript - Worker API
- JavaScript - Fetch API
- JavaScript - Geolocation API
- JavaScript 事件
- JavaScript - 事件
- JavaScript - DOM 事件
- JavaScript - addEventListener()
- JavaScript - 鼠标事件
- JavaScript - 键盘事件
- JavaScript - 表单事件
- JavaScript - Window/Document 事件
- JavaScript - 事件委托
- JavaScript - 事件冒泡
- JavaScript - 事件捕获
- JavaScript - 自定义事件
- JavaScript 错误处理
- JavaScript - 错误处理
- JavaScript - try...catch
- JavaScript - 调试
- JavaScript - 自定义错误
- JavaScript - 扩展错误
- JavaScript 重要关键字
- JavaScript - this 关键字
- JavaScript - void 关键字
- JavaScript - new 关键字
- JavaScript - var 关键字
- JavaScript HTML DOM
- JavaScript - HTML DOM
- JavaScript - DOM 方法和属性
- JavaScript - DOM Document
- JavaScript - DOM 元素
- JavaScript - DOM 属性 (Attr)
- JavaScript - DOM 表单
- JavaScript - 修改 HTML
- JavaScript - 修改 CSS
- JavaScript - DOM 动画
- JavaScript - DOM 导航
- JavaScript - DOM 集合
- JavaScript - DOM NodeList
- JavaScript - DOM DOMTokenList
- JavaScript 其他
- JavaScript - Ajax
- JavaScript - 异步迭代
- JavaScript - Atomics 对象
- JavaScript - rest 参数
- JavaScript - 页面重定向
- JavaScript - 对话框
- JavaScript - 页面打印
- JavaScript - 验证
- JavaScript - 动画
- JavaScript - 多媒体
- JavaScript - 图片地图
- JavaScript - 浏览器
- JavaScript - JSON
- JavaScript - 多行字符串
- JavaScript - 日期格式
- JavaScript - 获取日期方法
- JavaScript - 设置日期方法
- JavaScript - 模块
- JavaScript - 动态导入
- JavaScript - BigInt
- JavaScript - Blob
- JavaScript - Unicode
- JavaScript - 浅拷贝
- JavaScript - 调用栈
- JavaScript - 引用类型
- JavaScript - IndexedDB
- JavaScript - 点击劫持攻击
- JavaScript - 柯里化
- JavaScript - 图形
- JavaScript - Canvas
- JavaScript - 防抖
- JavaScript - 性能
- JavaScript - 样式指南
JavaScript - ECMAScript 2021
ECMAScript 2021标准于2021年发布。ECMAScript 2021为JavaScript带来了许多显著特性。String replaceAll()方法的引入简化了全局字符串替换。逻辑赋值运算符(&&=、||=和??=)增强了代码简洁性。此更新侧重于提高开发人员的生产力和代码可读性。
本章将讨论ECMAScript 2021中新增的所有功能。
ECMAScript 2021 中新增的功能
以下是添加到 ECMAScript 2021 版本 JavaScript 中的新方法、功能等。
- 数字分隔符 (_)
- Promise any() 方法
- String replaceAll() 方法
- 逻辑与赋值运算符 (&&=)
- 逻辑或赋值运算符 (||=)
- 空值合并赋值运算符 (??=)
这里,我们详细解释了每个功能。
数字分隔符 (_)
ECMAScript 2021 引入了数字分隔符。数字分隔符用于使数字更易于阅读。
示例
我们在下面的代码中添加了数字分隔符,以使数字更易于阅读。
<html> <body> <div id = "output">The value of the num is: </div> <script> let num = 90_00_000; document.getElementById("output").innerHTML += num; </script> </body> </html>
输出
The value of the num is: 9000000
Promise any() 方法
ECMAScript 2021 引入了 Promise any() 方法。promise.any() 方法会从 Promise 数组中返回最先完成的已完成的 Promise。
示例
在下面的代码中,我们创建了多个 Promise 并将其作为 Promise.any() 方法的参数传递。
我们已完成 promise1 并拒绝了 promise2。对于 Promise.any() 方法,JavaScript 控制流进入 then() 块,因为 promise1 已完成。
<html> <body> <div id = "demo"> </div> <script> const output = document.getElementById("demo"); const promise1 = new Promise((res, rej) => res()); const promise2 = new Promise((res, rej) => rej()); const promises = [promise1, promise2]; Promise.any(promises) .then(() => { output.innerHTML += 'One or more promises are resolved!'; }) .catch((err) => { output.innerHTML += 'All promises are rejected:' + err; }); </script> </body> </html>
输出
One or more promises are resolved!
String replaceAll() 方法
ECMAScript 2021 为字符串引入了 String replaceAll() 方法。string replaceAll() 方法用于将特定子字符串替换为另一个子字符串。
replaceAll() 方法采用字符串或正则表达式作为参数。
示例
在下面的代码中,我们使用 replaceAll() 方法将小写“a”替换为大写“A”。
<html> <body> <div id = "output1">Original string is: </div> <div id = "output2">Updated string is: </div> <script> let str = "abcd abcd abcd abcd"; document.getElementById("output1").innerHTML += str; let updatedStr = str.replaceAll("a", "A"); document.getElementById("output2").innerHTML += updatedStr; </script> </body> </html>
输出
Original string is: abcd abcd abcd abcd Updated string is: Abcd Abcd Abcd Abcd
逻辑与赋值运算符 (&&=) 运算符
ECMAScript 2021 向运算符引入了逻辑赋值运算符 (&&=、||= 和 ??=) 。JavaScript 逻辑与赋值运算符会在第一个操作数为真时,用第二个操作数更新第一个操作数的值。
示例
在下面的代码中,str 字符串的值不是虚值。因此,它会用“Hi”更新 str 变量的值。
<html> <body> <div id = "output">The value of the str is: </div> <script> let str = "Hello"; str &&= "Hi"; document.getElementById("output").innerHTML += str; </script> </body> </html>
输出
The value of the str is: Hi
逻辑或赋值运算符 (||=) 运算符
ECMAScript 2021 向运算符引入了逻辑或赋值运算符。如果第一个操作数为假,它会用第二个操作数更新第一个操作数的值。
示例
在下面的代码中,str 的初始值为 false。因此,逻辑或赋值运算符将其值更新为第二个操作数,即 10。
<html> <body> <div id = "output">The value of the str is: </div> <script> let str = false; str ||= 10; document.getElementById("output").innerHTML += str; </script> </body> </html>
输出
The value of the str is: 10
空值合并赋值 (??=) 运算符
ECMAScript 2021 向运算符中引入了空值合并赋值运算符。如果左操作数的值未定义或为 null,则此运算符会更新其值。
示例
在下面的代码中,str 变量的值为 null。因此,空值合并赋值运算符将 'default' 值赋给 str 变量。
<html> <body> <div id = "output">The value of the str is: </div> <script> let str = null; str ??= "default"; document.getElementById("output").innerHTML += str; </script> </body> </html>
输出
The value of the str is: default
警告 – 以上某些功能不受某些浏览器的支持。因此,您可以使用 polyfill 来避免错误。