ECMAScript的全局对象有哪些变化
ECMAScript(通常称为JavaScript)的全局对象在不同版本中经历了一些变化。以下是一些主要的变化:
ECMAScript 3 (ES3)
- 全局变量:
NaN,Infinity,undefined,null - 全局函数:
eval(),isFinite(),isNaN(),parseFloat(),parseInt(),decodeURI(),decodeURIComponent(),encodeURI(),encodeURIComponent(),escape(),unescape(),with() - 全局对象属性:
Math,Date,RegExp,JSON
ECMAScript 5 (ES5)
- 严格模式:引入了严格模式,通过
'use strict';声明。 - 新增全局函数:
Array.prototype.forEach(),Array.prototype.map(),Array.prototype.filter(),Array.prototype.reduce(),Object.create(),Object.defineProperty(),Object.defineProperties(),Object.getOwnPropertyNames(),Object.getOwnPropertySymbols(),JSON.stringify(),JSON.parse() - 新增全局对象属性:
JSON
ECMAScript 6 (ES6) / ECMAScript 2015
- 类和继承:引入了
class关键字和extends关键字。 - 模块系统:引入了
import和export语法。 - 箭头函数:引入了箭头函数表达式。
- 模板字符串:使用反引号(
`)来创建模板字符串。 - 解构赋值:允许从数组或对象中提取数据并赋值给变量。
- 默认参数:函数参数可以有默认值。
- 剩余参数:允许将不定数量的参数表示为一个数组。
- Set 和 Map:引入了
Set和Map集合类型。 - Promise:引入了
Promise对象,用于异步操作。 - Symbol:引入了
Symbol类型,用于创建唯一的标识符。 - 迭代器协议:引入了
Symbol.iterator属性,使得对象可以被迭代。 - 生成器函数:引入了
function*语法,用于定义生成器函数。
ECMAScript 2016 (ES7)
- 指数运算符:引入了
**运算符,用于计算幂。 - Array.prototype.includes():新增方法,用于检查数组是否包含某个元素。
ECMAScript 2017 (ES8)
- async/await:引入了
async和await关键字,用于简化异步代码的编写。 - Object.values() 和 Object.entries():新增方法,分别返回对象的值和键值对数组。
- String.prototype.padStart() 和 String.prototype.padEnd():新增方法,用于填充字符串。
ECMAScript 2018 (ES9)
- 正则表达式新特性:引入了
u标志,支持Unicode模式,以及y标志,支持粘性匹配。 - Promise.finally():新增方法,无论Promise是resolved还是rejected,都会执行
finally块中的代码。 - async迭代器:引入了
async function*语法,用于定义异步生成器函数。
ECMAScript 2019 (ES10)
- Array.prototype.flat() 和 Array.prototype.flatMap():新增方法,用于处理多维数组。
- Object.fromEntries():新增方法,将键值对列表转换为对象。
- String.prototype.matchAll():新增方法,返回一个迭代器,包含所有匹配结果。
ECMAScript 2020 (ES11)
- BigInt:引入了
BigInt类型,用于表示任意精度的整数。 - Dynamic Import:允许动态导入模块。
- Nullish Coalescing Operator:引入了
??运算符,用于处理null或undefined的情况。 - Optional Chaining:引入了
?.运算符,用于简化访问嵌套对象属性的过程。
ECMAScript 2021 (ES12)
- String.prototype.replaceAll():新增方法,用于替换字符串中的所有匹配项。
- Promise.any():新增方法,返回第一个成功的Promise的结果。
- Logical Assignment Operators:引入了逻辑赋值运算符,如
&&=,||=,??=。
ECMAScript 2022 (ES13)
- String.prototype.replaceAll():改进了
replaceAll()方法,使其更加强大和灵活。 - Atomics.wait(), Atomics.notify(), Atomics.notifyAll():新增方法,用于原子操作。
- SharedArrayBuffer:改进了
SharedArrayBuffer,使其更加安全和高效。
这些变化反映了JavaScript语言的不断发展和完善,以适应现代编程的需求。