通过示例来学习ES2016, 2017, 2018的新特性

栏目: JavaScript · 发布时间: 7年前

内容简介:译者按:本文系统地总结了所有的新特性,并用浅显的例子解释。一直保持对JavaScript新特性的关注是一件很难的事情,特别是还找不到几个有用的例子去理解它。本文会辅以有用的例子来讲述

译者按:本文系统地总结了所有的新特性,并用浅显的例子解释。

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

小编推荐:Fundebug专注于JavaScript、微信小程序、微信小游戏,Node.js和 Java 线上bug实时监控。真的是一个很好用的bug监控服务,众多大佬公司都在使用。

通过示例来学习ES2016, 2017, 2018的新特性

一直保持对JavaScript新特性的关注是一件很难的事情,特别是还找不到几个有用的例子去理解它。

本文会辅以有用的例子来讲述 TC39 中的18个特性,它们分别在ES2016, ES2017和ES2018中加入。 鉴于本文内容很长,我们将分为两个部分来介绍,此为第一部分。

通过示例来学习ES2016, 2017, 2018的新特性

1. Array.prototype.includes

includes 是一个Array上很有用的函数,用于快速查找数组中是否包含某个元素。(包括NaN,所以和indexOf不一样)。

通过示例来学习ES2016, 2017, 2018的新特性

2. 指数函数的中缀形式

加/减法我们通常都是用其中缀形式,直观易懂。在ECMAScript2016中,我们可以使用 ** 来替代Math.pow。

通过示例来学习ES2016, 2017, 2018的新特性
通过示例来学习ES2016, 2017, 2018的新特性

1. Object.values()

Object.values()函数和Object.keys()很相似,它返回一个对象中自己属性的所有值(通过原型链继承的不算)。

通过示例来学习ES2016, 2017, 2018的新特性

2. Object.entries()

Object.entries()和Object.keys相关,不过entries()函数会将key和value以数组的形式都返回。这样,使用循环或则将对象转为Map就很方便了。

例子1:

通过示例来学习ES2016, 2017, 2018的新特性

例子2:

通过示例来学习ES2016, 2017, 2018的新特性

3. 字符串追加

提供了两个字符串追加的方法String.prototype.padStart和String.prototype.padEnd,方便我们将一个新的字符串追加到某个字符串的头尾。

'someString'.padStart(numberOfCharcters [,stringForPadding]); 
'5'.padStart(10) // '          5'
'5'.padStart(10, '=*') //'=*=*=*=*=5'
'5'.padEnd(10) // '5         '
'5'.padEnd(10, '=*') //'5=*=*=*=*='
复制代码

这个对于格式化输出很有用!

3.1 padStart例子

我们有一个不同长度元素的数组,我们可以往前面追加0来使得他们打印的长度都为10。

通过示例来学习ES2016, 2017, 2018的新特性

3.2 padEnd例子

同样,通过在后面追加字符串来格式化输出。

通过示例来学习ES2016, 2017, 2018的新特性
const cars = {
  ':blue_car:BMW': '10',
  ':oncoming_automobile:Tesla': '5',
  ':oncoming_taxi:Lamborghini': '0'
}
Object.entries(cars).map(([name, count]) => {
  //padEnd appends ' -' until the name becomes 20 characters
  //padStart prepends '0' until the count becomes 3 characters.
  console.log(`${name.padEnd(20, ' -')} Count: ${count.padStart(3, '0')}`)
});
//Prints..
// :blue_car:BMW - - - - - - -  Count: 010
// :oncoming_automobile:Tesla - - - - - -  Count: 005
// :oncoming_taxi:Lamborghini - - -  Count: 000
复制代码

3.3 使用padStart和padEnd来格式化Emojis和其他宽字符

Emojis和宽字符使用多个字节来表示,因此可能使用padStart和padEnd的结果并非如你所愿。

比如:我们追加:heart:到 heart 前面:

//你会发现不仅没有5个桃心,有一个桃心还很奇怪。
'heart'.padStart(10, ":heart:"); // prints.. ':heart::heart:❤heart'
复制代码

这是因为:heart:占有2个字节('\u2764\uFE0F'),而heart本身有5个字节,因此只有5个字节的余地。所以只是追加了2个半的桃心。最后追加的'\u2764'会显示为小黑桃心。

4. Object.getOwnPropertyDescriptors

该函数返回一个对象所有的属性,甚至包括get/set函数。ES2017加入这个函数的主要动机在于方便将一个对象深度拷贝给另一个对象,同时可以将getter/setter拷贝。和Object.assign不同。

Object.assign将一个对象除了getter/setter以外的都深度拷贝了。

将原对象Car拷贝到ElectricCar,你就会发现Object.getOwnPropertyDescriptors拷贝了 getter和setter,而Object.assign没有。

通过示例来学习ES2016, 2017, 2018的新特性
通过示例来学习ES2016, 2017, 2018的新特性

5. 允许在函数参数最后添加逗号

这是一个很小的改动,方便git算法更加方便区分代码职责。我们用一个详细的例子来理解:

通过示例来学习ES2016, 2017, 2018的新特性

值得一提的是,在函数调用的时候,也可以在最后添加逗号。

6. Async/Await

迄今为止,我介绍的特性中最有用的就属这个功能了。Async函数可以帮助我们摆脱“回调地狱”,并且整个代码会更加简洁。

async 关键字告诉JavaScript编译器对于标定的函数要区别对待。当编译器遇到 await 函数的时候会暂停。它会等到 await 标定的函数返回的promise。该promise要么得到结果、要么reject。

在下面的例子中, getAmount 函数调用 getUsergetBankBalance 两个异步函数。我们可以用promise来实现它,不过用async await更加简洁。

通过示例来学习ES2016, 2017, 2018的新特性

6.1 async函数返回Promise

如果你想获取一个async函数的结果,你需要使用Promise的then语法。

在下面的例子中,我们想用console.log来打印doubleAndAdd的结果,可以使用then语法,将console.log函数作为参数传入。

通过示例来学习ES2016, 2017, 2018的新特性

6.2 并行处理

在上面的例子中,我们显示地调用了await两次,因为每次都等待了1秒钟,因此总计两秒钟。现在,我们可以使用Promise.all函数来让他们并行处理。

通过示例来学习ES2016, 2017, 2018的新特性

6.3 async/await的错误处理

有很多方法来处理错误。

  • 方法1:在函数中使用try-catch
通过示例来学习ES2016, 2017, 2018的新特性
  • 方法2:catch每一个await表达式

因为每一个await表达式都会返回Promise,你可以对一个进行catch操作。

通过示例来学习ES2016, 2017, 2018的新特性
  • 方法3:catch整个async-await函数
通过示例来学习ES2016, 2017, 2018的新特性

关于Fundebug

Fundebug专注于JavaScript、微信小程序、微信小游戏,Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了5亿+错误事件,得到了众多知名用户的认可。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learning PHP 5

Learning PHP 5

David Sklar / O'Reilly / July, 2004 / $29.95

Learning PHP 5 is the ideal tutorial for graphic designers, bloggers, and other web crafters who want a thorough but non-intimidating way to understand the code that makes web sites dynamic. The book ......一起来看看 《Learning PHP 5》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具