ECMAScript(简称 ES)是 JavaScript 的标准化规范,定义了语言的语法、类型、语句、关键字等方面的规则。自 1997 年发布第一版以来,ECMAScript 经历了多个版本的更新和演进,每个版本都增加了新的特性和语法,使得 JavaScript 变得更加强大、灵活和易于使用。
本篇文章将介绍 ECMAScript 2015 到 ECMAScript 2018 这四个版本的主要特性和改进,帮助读者了解 JavaScript 的演进历程,并掌握其中的核心概念和用法。
ECMAScript 2015(ES6)
ECMAScript 2015(简称 ES6)是 JavaScript 的重要更新版本,于 2015 年 6 月发布。ES6 引入了许多新特性和语法,包括:
let 和 const 关键字
ES6 引入了 let 和 const 关键字,用于声明块级作用域的变量和常量。与 var 关键字不同,let 和 const 声明的变量和常量只在当前块中有效,不会污染全局作用域。
{ let x = 1; const y = 2; } console.log(x); // ReferenceError: x is not defined console.log(y); // ReferenceError: y is not defined
箭头函数
ES6 引入了箭头函数,可以更简洁地定义函数,避免了传统函数中 this 关键字的困扰。
const add = (x, y) => x + y; console.log(add(1, 2)); // 3
模板字符串
ES6 引入了模板字符串,可以更方便地拼接字符串,支持变量和表达式的嵌入。
const name = 'John'; console.log(`Hello, ${name}!`); // Hello, John!
解构赋值
ES6 引入了解构赋值,可以更方便地从数组或对象中提取值,并赋给变量。
const [x, y] = [1, 2]; console.log(x, y); // 1 2 const {name, age} = {name: 'John', age: 30}; console.log(name, age); // John 30
Promise 对象
ES6 引入了 Promise 对象,用于处理异步操作,可以更清晰地表达异步操作的状态和结果。
const promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('done'); }, 1000); }); promise.then(result => console.log(result)); // done
其他特性
ES6 还引入了类、模块化、默认参数、rest 参数、扩展运算符、Symbol 类型等许多新特性和语法,不一一列举。
ECMAScript 2016(ES7)
ECMAScript 2016(简称 ES7)是 JavaScript 的小更新版本,于 2016 年 6 月发布。ES7 引入了两个新特性:
Array.prototype.includes 方法
ES7 引入了 Array.prototype.includes 方法,用于判断数组中是否包含某个元素。
const arr = [1, 2, 3]; console.log(arr.includes(2)); // true console.log(arr.includes(4)); // false
指数运算符
ES7 引入了指数运算符(**),用于计算一个数的幂次方。
console.log(2 ** 3); // 8 console.log(10 ** -2); // 0.01
ECMAScript 2017(ES8)
ECMAScript 2017(简称 ES8)是 JavaScript 的小更新版本,于 2017 年 6 月发布。ES8 引入了三个新特性:
Object.values 和 Object.entries 方法
ES8 引入了 Object.values 和 Object.entries 方法,用于获取对象的值和键值对数组。
const obj = {name: 'John', age: 30}; console.log(Object.values(obj)); // ['John', 30] console.log(Object.entries(obj)); // [['name', 'John'], ['age', 30]]
字符串填充方法
ES8 引入了字符串填充方法,包括 padStart 和 padEnd 方法,用于在字符串的开头或结尾填充指定的字符。
const str = '123'; console.log(str.padStart(5, '0')); // 00123 console.log(str.padEnd(5, '0')); // 12300
异步函数
ES8 引入了异步函数(async/await),用于更方便地处理异步操作,避免了回调地狱的问题。
async function fetchData() { const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); } fetchData();
ECMAScript 2018(ES9)
ECMAScript 2018(简称 ES9)是 JavaScript 的小更新版本,于 2018 年 6 月发布。ES9 引入了四个新特性:
对象扩展符号
ES9 引入了对象扩展符号(...),用于更方便地复制对象和合并对象。
const obj1 = {name: 'John'}; const obj2 = {...obj1, age: 30}; console.log(obj2); // {name: 'John', age: 30}
Promise.prototype.finally 方法
ES9 引入了 Promise.prototype.finally 方法,用于在 Promise 完成后执行一些操作,无论 Promise 成功或失败。
const promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('done'); }, 1000); }); promise.finally(() => console.log('finally')); // finally
正则表达式命名捕获组
ES9 引入了正则表达式命名捕获组,可以更方便地从匹配结果中提取值,并赋给变量。
const re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const result = re.exec('2019-10-01'); console.log(result.groups.year, result.groups.month, result.groups.day); // 2019 10 01
其他特性
ES9 还引入了异步迭代器、Rest/Spread 属性、正则表达式 Unicode 属性转义等许多新特性和语法,不一一列举。
总结
ECMAScript 2015 到 ECMAScript 2018 这四个版本的更新和演进,使得 JavaScript 变得更加强大、灵活和易于使用。掌握其中的核心概念和用法,可以帮助前端开发者更高效地编写 JavaScript 代码,提高开发效率和代码质量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6611e5f6d10417a222273695