ECMAScript(简称ES)是一种由Ecma国际组织进行标准化的脚本语言,常被用于Web开发中。随着JavaScript的普及,ECMAScript也不断更新,从ES6开始,每年都会推出新的版本。本文将介绍ECMAScript 2016(ES7)到ECMAScript9的一些新特性。
ECMAScript 2016(ES7)
Array.prototype.includes
在ES6中我们已经有了 Array.prototype.indexOf 方法,用于查找指定元素在数组中的位置。但这个方法有两个缺点:一是无法判断NaN,二是需要手动判断是否为-1才知道该元素是否存在。ES7中新增的 Array.prototype.includes 方法解决了这些问题,用于判断一个数组是否包含指定元素,返回布尔值。
let arr = [1, NaN, 'hello'] console.log(arr.includes(NaN)) // true console.log(arr.includes('world')) // false
指数运算符
ES7中新增了指数运算符 **,用于计算一个数的幂次方。它的优先级高于乘法运算符。
console.log(2 ** 3) // 8 console.log(10 ** -1) // 0.1
ECMAScript 2017(ES8)
async/await
ES8中新增了 async/await 关键字,用于简化异步代码的编写。async 函数返回的是一个 Promise 对象,await 可以暂停 async 函数的执行,等待 Promise 对象的结果。当 Promise 成功返回结果时,await 将返回结果赋值,代码继续执行;当 Promise 失败时,抛出异常。
// javascriptcn.com 代码示例 async function doubleNum(num) { const res = await new Promise((resolve) => { setTimeout(() => { resolve(num * 2) }, 1000) }) console.log(res) // 6 } doubleNum(3)
Object.values 和 Object.entries
ES8中新增了 Object.values 和 Object.entries 方法。Object.values 方法返回对象中所有的值,Object.entries 方法返回对象中的键值对数组。
const obj = { foo: 'bar', baz: 42 } console.log(Object.values(obj)) // ['bar', 42] console.log(Object.entries(obj)) // [['foo', 'bar'], ['baz', 42]]
ECMAScript 2018(ES9)
Promise.prototype.finally
ES9为 Promise 增加了 Promise.prototype.finally 方法,用于指定无论 Promise 成功还是失败都要执行的操作。
const promise = new Promise(resolve => resolve('success')) promise.then(res => console.log(res)).finally(() => console.log('finally'))
输出:success finally
Rest/Spread 属性
Rest/Spread 属性是 ES9 中的一个新特性,用于方便地处理对象和数组的拷贝和合并。Rest 属性用于剩余参数的收集,Spread 属性用于展开对象或数组。
// javascriptcn.com 代码示例 // Rest const { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 } console.log(x) // 1 console.log(y) // 2 console.log(z) // { a: 3, b: 4 } // Spread const obj1 = { x: 1, y: 2 } const obj2 = { z: 3, w: 4 } const mergedObj = { ...obj1, ...obj2 } console.log(mergedObj) // { x: 1, y: 2, z: 3, w: 4 }
总结
ECMAScript 的持续更新为 JavaScript 开发带来了更多的可能性。从 ECMAScript 2016 到 ECMAScript9 的新特性中,我们看到了更方便快捷的语法和更强大的功能。学习和掌握这些新特性,可以让我们更高效地编写 JavaScript 代码。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652f550a7d4982a6eb07144c