还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。
No. | 内容链接 |
---|---|
1 | Openlayers 【入门教程】 - 【源代码+示例300+】 |
2 | Leaflet 【入门教程】 - 【源代码+图文示例 150+】 |
3 | Cesium 【入门教程】 - 【源代码+图文示例200+】 |
4 | MapboxGL【入门教程】 - 【源代码+图文示例150+】 |
5 | 前端就业宝典 【面试题+详细答案 1000+】 |
ECMAScript 是定义 JavaScript 语言的标准,由 ECMA International 维护。下面是 ECMAScript 的各个版本以及每个版本发布的时间和一些关键特性:
ECMAScript 版本概览
-
ECMAScript 1 (ES1) - 1997
- 第一版标准,定义了基本的语言结构。
-
ECMAScript 2 (ES2) - 1998
- 第二版标准,主要是修正和澄清第一版中的一些不明确之处。
-
ECMAScript 3 (ES3) - 1999
- 添加了
var
和function
作用域规则、eval
函数、parseInt
和parseFloat
等。 - 定义了
Number
,String
,Boolean
,Array
,Date
,RegExp
,Math
, 和JSON
对象。
- 添加了
-
ECMAScript 5 (ES5) - 2009
- 引入了
let
和const
关键字(在严格模式下可用)。 - 增加了
Object.create
方法。 - 定义了
JSON.stringify
和JSON.parse
方法。
- 引入了
-
ECMAScript 6 (ES6, ES2015) - 2015
- 引入了
let
和const
关键字(在非严格模式下可用)。 - 添加了模板字符串、箭头函数、解构赋值、默认参数、扩展运算符等。
- 定义了
Promise
,Map
,Set
,WeakMap
,WeakSet
等新的数据结构。 - 引入了
class
语法糖。
- 引入了
-
ECMAScript 7 (ES7, ES2016) - 2016
- 引入了
Array.prototype.includes
方法。 - 添加了指数运算符
**
。
- 引入了
-
ECMAScript 8 (ES8, ES2017) - 2017
- 引入了
async/await
。 - 添加了
Object.values
和Object.entries
方法。 - 引入了
String.prototype.padStart
和String.prototype.padEnd
方法。 - 定义了
SharedArrayBuffer
和Atomics
API。
- 引入了
-
ECMAScript 9 (ES9, ES2018) - 2018
- 添加了
Object.getOwnPropertyDescriptors
方法。 - 引入了
Promise.finally
方法。 - 定义了
Rest/Spread
改进。 - 引入了
async generators
。
- 添加了
-
ECMAScript 10 (ES10, ES2019) - 2019
- 引入了
Array.flat
和Array.flatMap
方法。 - 添加了
Object.fromEntries
方法。 - 定义了
String.prototype.trimStart
和String.prototype.trimEnd
方法。 - 引入了
Symbol.description
属性。
- 引入了
-
ECMAScript 11 (ES11, ES2020) - 2020
- 引入了
BigInt
数据类型。 - 添加了
String.prototype.matchAll
方法。 - 定义了
Promise.allSettled
方法。 - 引入了
globalThis
对象。 - 定义了
Temporal
模块(日期/时间处理)。
- 引入了
-
ECMAScript 12 (ES12, ES2021) - 2021
- 引入了
String.prototype.replaceAll
方法。 - 添加了
Promise.any
方法。 - 定义了
WeakRefs
。 - 引入了
Numeric Separators
改进。
- 引入了
-
ECMAScript 13 (ES13, ES2022) - 2022
- 引入了顶级
await
。 - 添加了
Array.prototype.at
方法。 - 定义了私有类字段和方法的改进。
- 引入了静态类特征的改进。
- 引入了顶级
-
ECMAScript 14 (ES14, ES2023) - 2023
- 引入了装饰器(Decorators)作为稳定特性。
- 添加了
Error.cause
属性。 - 定义了
Record
和Tuple
类型。 - Temporal 模块继续得到改进。
-
ECMAScript 15 (ES15, ES2024) - 2024
- 预计将包含新的语言特性、API 扩展、性能优化等。
示例代码
这里有一些简单的示例代码,展示了从 ES6 到 ES2023 的一些特性:
ES6 (ES2015)
// 箭头函数
const double = x => x * 2;
console.log(double(5)); // 输出: 10
// 解构赋值
const [first, second] = [1, 2];
console.log(first, second); // 输出: 1 2
// 默认参数
function greet(name = "World") {
console.log(`Hello, ${name}!`);
}
greet(); // 输出: Hello, World!
// 模板字符串
const name = "Alice";
console.log(`Hello, ${name}!`); // 输出: Hello, Alice!
ES2019 (ES10)
// Array.flat
const arr = [1, 2, [3, [4, 5]]];
const flatArr = arr.flat(2);
console.log(flatArr); // 输出: [1, 2, 3, 4, 5]
// Object.fromEntries
const entries = [['a', 1], ['b', 2]];
const obj = Object.fromEntries(entries);
console.log(obj); // 输出: { a: 1, b: 2 }
ES2020 (ES11)
// BigInt
const largeNumber = 1234567890123456789012345678901234567890n;
console.log(largeNumber + 1n); // 输出: 1234567890123456789012345678901234567891n
// String.prototype.matchAll
const text = "hello world";
const matches = text.matchAll(/l/g);
for (const match of matches) {
console.log(match.index); // 输出: 2, 3, 9
}
ES2022 (ES13)
// 顶级 await
import { fetchUserData } from './fetchUserData.js';
const user = await fetchUserData();
console.log(user);
// Array.prototype.at
const array = [1, 2, 3, 4, 5];
console.log(array.at(-1)); // 输出: 5
ES2023 (ES14)
// Decorators
function log(target, name, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
console.log(`Calling "${name}" with`, args);
return originalMethod.apply(this, args);
};
return descriptor;
}
class Greeter {
@log
greet(message) {
console.log(message);
}
}
const greeter = new Greeter();
greeter.greet("Hello, world!");
以上是对 ECMAScript 各个版本的概述和一些示例代码。