ECMAscript2021 新特性

ECMAscript2021 新特性

  • String.prototype.replaceAll

    在JavaScript中, ]replace() 方法仅替换字符串中一个模式的第一个实例,如果我们需要替换所有就要 使用全局正则表达式

    提案方法 replaceAll() 返回一个新字符串,其中模式的所有匹配都会被替代项替换。模式可以是字符串或正则表达式,而替换项可以是字符串或针对每次匹配执行的函数。

    let str = 'I use linux, I love linux'
    str = str.replaceAll('linux', 'windows');
    
    console.log(str)
    
    /**** Output ****/
    // I use windows, I love windows
    
  • Promise.any
    Promise.any 接受一系列Promise并在任何提供 Promise 解决后立即解决。

    如果这个方法命中了 Promise 列表 / 数组中的第一个已解析的 Promise,就会短路并返回一个值。
    
    	Promise.any([
    	new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')),
    	new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Second')),
    	new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')),
    	])
    	.then(value => console.log(`Result: ${value}`))
    	.catch (err => console.log(err))
    
    	/**** Output ****/
    	// Result: Second
    
    	Promise.any([
    	new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')),
    	new Promise((resolve, reject) => setTimeout(resolve, 3000, 'Second')),
    	new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')),
    	])
    	.then(value => console.log(`Result: ${value}`))
    	.catch (err => console.log(err))
    
    	/**** Output ****/
    	// Result: First
    
      如果所有的 promise 都被拒绝,那么它将抛出一个汇总错误消息。
    
    	Promise.any([
    	new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')),
    	new Promise((resolve, reject) => setTimeout(reject, 1000, 'Second')),
      	new Promise((resolve, reject) => setTimeout(reject, 2000, 'First')),
    	])
    	.then(value => console.log(`Result: ${value}`))
    	.catch (err => console.log(err))
    
    	/**** Output ****/
    	// AggregateError: All promises were rejected
    
    它与 Promise.race() 不同,因为一旦给定的 Promise 之一被解析或拒绝,Promise.any() 方法就会短路。
    
  • 逻辑运算符和赋值表达式

     逻辑赋值运算符将逻辑运算(例如??,&&或||)与赋值(例如=)结合在一起
    
  1. a | |= b
    如果 a 为真则返回 a,如果 a 为假则返回 b
	//old
	if (!a) {
		a = b
	}
	// or
	a = a || b
	//  new
	a ||= b
  1. a &&= b
    如果 a 为真,则返回 b , 如果 a 为假,则返回 a
	//old
	if (!a) {
		a = b
	}
	// or
	a = a && b
	//  new
	a &&= b
  1. a ??= b
    如果 a 为 null 或未定义,则返回 b;如果a为真,则返回a。
	//old
	a = a ?? b
	//  new
	a ??= b
  • 数值分隔符

     新引入的数值分隔符使用 _(下划线)字符,在数值组之间提供分隔,使数值读起来更容易
    
let number = 100_000 
console.log(number)

/**** Output ****/
// 100000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值