📅  最后修改于: 2020-10-25 10:52:10             🧑  作者: Mango
在这里,我们将了解ES9中的新功能。让我们从了解异步生成器开始。
可以使用async关键字使异步生成器异步。下面给出了定义异步生成器的语法–
async function* generator_name() {
//statements
}
以下示例显示了一个异步生成器,该生成器在每次调用生成器的next()方法时都返回Promise。
上面的代码输出如下:
{value: 1, done: false}
{value: 2, done: false}
{value: 3, done: false}
{value: undefined, done: true}
异步可迭代对象不能使用传统的for..of循环语法进行迭代,因为它们会返回promise。 ES9引入了for await循环来支持异步迭代。
下面给出了使用for await循环的语法,其中,
在每次迭代中,将不同属性的值分配给变量,并且可以使用const,let或var声明变量。
for await (variable of iterable) {
statement
}
以下示例显示了使用for await循环来迭代异步生成器。
上面代码的输出将如下所示-
end of script
1
2
3
下面的示例使用for等待循环来迭代数组。
上面的代码输出如下:
end of script
10
20
30
40
ES9支持对对象使用Rest和Spread运算符。
下面的示例说明将rest运算符与对象一起使用。学生的age属性的值将被复制到age变量中,而其余属性的值将使用rest语法`…`被复制到另一个变量中。
上面代码的输出如下:
10
{height: 5, weight: 50}
散布运算符可用于组合多个对象或克隆对象。这在以下示例中显示-
以上代码的输出将如下所示-
{a: 10, b: 20}
{a: 10, b: 20, c: 30}
每当兑现承诺时,无论其结果如何,都将执行finally() 。该函数返回一个promise。它可以用来避免Promise的then()和catch()处理程序中的代码重复。
下面提到的语法是针对函数finally()的。
promise.finally(function() {
});
promise.finally(()=> {
});
以下示例声明了一个异步函数,该函数在延迟3秒后返回正数的平方。如果传递负数,该函数将引发错误。无论承诺被拒绝还是已解决,在两种情况下都将执行finally块中的语句。
上面代码的输出将如下所示
Start
End
//after 3 seconds
result is 100
inside finally
executes all the time
从ES7开始,标记模板符合以下转义序列的规则-
Unicode转义序列使用“ \ u”表示,例如\ u2764 \ uFE0F
Unicode代码点转义序列使用“ \ u {}”表示,例如\ u {2F}
十六进制转义序列用“ \ x”表示,例如\ xA8
八进制字面量转义序列用“”表示,后跟一个或多个数字,例如\ 125
在ES2016及更早版本中,如果无效的转义序列与加标签的函数一起使用,则会引发语法错误,如下所示-
//tagged function with an invalid unicode sequence
myTagFn`\unicode1`
// SyntaxError: malformed Unicode character escape sequence
但是,与早期版本不同,ES9会将无效的unicode序列解析为undefined,并且不会引发错误。这在以下示例中显示-
上面代码的输出将如下所示-
{parsed: undefined}
{parsed: "❤️"}
ES9引入了一个特殊的属性raw ,该属性在tag函数的第一个参数上可用。此属性使您可以在输入原始字符串访问它们,而无需处理转义序列。
上面的代码输出如下:
{Parsed: undefined, Raw: "\unicode"}
{Parsed: "❤️", Raw: "\u2764\uFE0F"}
在正则表达式中,点运算符或点号用于匹配单个字符。的。像\ n点运算符跳过字符,\如图中下面实施例R –
console.log(/Tutorials.Point/.test('Tutorials_Point')); //true
console.log(/Tutorials.Point/.test('Tutorials\nPoint')); //false
console.log(/Tutorials.Point/.test('Tutorials\rPoint')); //false
正则表达式模式表示为/ regular_expression /。 test()方法采用字符串参数并搜索正则表达式模式。在上面的示例中, test()方法搜索以Tutorials开头,后跟任何单个字符并以Point结尾的模式。如果在Tutorials和Point之间的输入字符串使用\ n或\ r ,则test()方法将返回false。
true
false
false
ES9引入了一个新标志-DotAllFlag(\ s) ,可与Regex一起使用以匹配行终止符和表情符号。这在以下示例中显示-
console.log(/Tutorials.Point/s.test('Tutorials\nPoint'));
console.log(/Tutorials.Point/s.test('Tutorials\rPoint'));
上面代码的输出将如下所述-
true
true
在ES9之前,捕获组通过索引访问。 ES9允许我们为捕获组分配名称。下面给出了相同的语法-
(?pattern1)
const birthDatePattern = /(?[0-9]{4})-(?[0-9]{2})/;
const birthDate = birthDatePattern.exec('1999-04');
console.log(birthDate.groups.myYear);
console.log(birthDate.groups.myMonth);
上面代码的输出如下所示-
1999
04