聊聊ES7与ES8特性
译者按: 转眼ES6发布2年了,是时候了解一下ES7与ES8特性了!
译者: Fundebug
为了保证可读性,本文采用意译而非直译,并且对源代码进行了大量修改。另外,本文版权归原作者所有,翻译仅用于学习。
我曾写过一篇关于ES6博客《10个最佳ES6特性》,这次我打算聊聊ES7和ES8特性。
ES7只有2个特性:
- includes()
- 指数操作符
ES8尚未发布(2017年1月),下面是它已经完成起草的一些特性:
- Object.values()
- Object.entries()
- padStart()
- padEnd()
- Object.getOwnPropertyDescriptors()
- 函数参数列表结尾允许逗号
- Async/Await
Array.prototype.includes()
不使用ES7
使用indexOf()验证数组中是否存在某个元素,这时需要根据返回值是否为-1来判断:
let arr = ['react', 'angular', 'vue']; |
使用ES7
使用includes()验证数组中是否存在某个元素,这样更加直观简单:
let arr = ['react', 'angular', 'vue']; |
指数操作符
不使用ES7
使用自定义的递归函数calculateExponent或者Math.pow()进行指数运算:
function calculateExponent(base, exponent) |
使用ES7
使用指数运算符**,就像+、-等操作符一样:
console.log(7**3); |
Object.values()
不使用ES8
使用Object.keys()遍历对象的属性值,需要通过属性名key去获取属性值:
let obj = {a: 1, b: 2, c: 3}; |
使用ES8
使用Object.values()遍历对象的属性值,无需使用使用属性名:
let obj = {a: 1, b: 2, c: 3}; |
Object.entries()
不使用ES8
使用Object.keys()遍历对象的属性名和属性值:
let obj = {a: 1, b: 2, c: 3}; |
使用ES8
使用Object.entries()遍历对象的属性名和属性值:
let obj = {a: 1, b: 2, c: 3}; |
padStart()
不使用ES8
console.log('0.00') |
输出结果如下:
0.00 |
使用ES8
使用padStart()可以在字符串前面填充指定的字符串:
console.log('0.00'.padStart(20)) |
输出结果如下:
0.00 |
padEnd()
不使用ES8
console.log('0.00 ' + '0.00' ) |
输出如下:
0.00 0.00 |
使用ES8
使用padEnd()可以在字符串后面填充指定的字符串:
console.log('0.00'.padEnd(20) + '0.00' ) |
输出如下:
0.00 0.00 |
Object.getOwnPropertyDescriptors()
azatsBooks对象的定义如下:
let azatsBooks = { |
不使用ES8
使用Object.getOwnPropertyDescriptor()获取单个属性的属性描述符。
获取azatsBooks对象的books属性的属性描述符:
console.log(Object.getOwnPropertyDescriptor(azatsBooks, 'books')); |
获取azatsBooks对象的lastest方法的属性描述符:
console.log(Object.getOwnPropertyDescriptor(azatsBooks, 'latest')); |
使用ES8
Object.getOwnPropertyDescriptors()相当于Object.getOwnPropertyDescriptor()的复数形式,可以获取对象的所有自身属性的描述符:
console.log(Object.getOwnPropertyDescriptors(azatsBooks)) |
函数参数列表结尾允许逗号
不使用ES8
var f = function(a, |
使用ES8
var f = function(a, |
允许逗号之后,可以避免一些不必要的报错。(如果你希望实时监控JavaScript应用的错误,欢迎免费使用Fundebug)
Async/Await
使用Promise
使用Promise写异步代码,会比较麻烦:
axios.get(`/q?query=${query}`) |
使用Async/Await
Async/Await使得异步代码看起来像同步代码,这正是它的魔力所在:
async fetchData(query) => |
Async/Await是写异步代码的新方式,以前的方法有回调函数和Promise。相比于Promise,它更加简洁,并且处理错误、条件语句、中间值都更加方便,因此有望替代Promise,成为新一代的一步代码编写方式。对细节感兴趣的话,可以查看Fundebug翻译的《Async/Await替代Promise的6个理由》。
关于Fundebug
Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了30亿+错误事件,付费客户有阳光保险、达令家、核桃编程、荔枝FM、微脉等众多品牌企业。欢迎大家免费试用!
版权声明: 转载时请注明作者KiwenLau以及本文地址: https://kiwenlau.com/2017/08/28/es7-and-es8/