7个JavaScript新特性(一)

前言

本文将介绍七个即将在浏览器和其他引擎中支持JS新特性

一,类的私有变量

在不久的将来我可以使用 # 符号表示类的私有变量 。这样就不需要使用闭包来隐藏不想暴露给外界的私有变量。

	calss Demo {
		#x = 0;
		
		#increment(){
		this.#x++
		}
		
		onClick(){
		this.#increment()
		}
	}
	const demo = new Demo()
	c.onClick();
	c.#increment(); //报错

通过 # 修饰的成员变量或成员函数就成为了私有变量,如果试图在 Class外部访问,则会抛出异常。现在,这个新特性可在最新版本的 Chrome 和 Node.js中使用。

二,可选链操作符

在你编写代码的过程中,当需要访问嵌套在对象内部好几层的属性时,可能会得到一个错误 Cannot read property 'stop' of undefined,然后你就要修改你的代码来处理属性链中每一个可能undefined 对象,比如:

	let Props = obj && obj.first && obj.first.second;

在访问obj.first.second之前,obj和obj.first 的值要被确认非null(且不是undefined)。目的是为了防止错误发生,如果简单直接的访问obj.first.second而不对obj和obj.first 进行校验就有可能产生错误。
有了可选链式调用 ,你只要这样写就可以做同样的事情。

	let Props = obj?.first?.second

如果 obj 或 obj.fist是 null / undefinde ,表达式将会短路计算直接返回undefined。

三,空位合并操作符

我们在开发过程中经常会遇到这样的场景:变量如果是空值,则就可以使用默认值,比如:

	let c = a ? a : b
	let c = a || b

这两种方式有个明显的弊端,它都会覆盖所有的假值,比如 ( 0 ,’ ‘,false),这些值可能是在某些情况下有效的输入。
为了解决这个问题,有人提议创建一个 nullish 合并运算符,用 ?? 表示。有了它,我们仅在第一项为null 或 undefined 时设置默认值。

	let c = a ?? b;
	//等价于 let c = a!==undefined && a !== null ? a : b;

比如以下代码:

	const x = null;
	const y = x ?? 500;
	console.log(y);//500
	const n = 0;
	const m = n ?? 500; 
	console.log(m) //0

四,BingInt

JS在Math上一直都很糟糕的原因之一是:无法精确表示大于数字 2 ^53,这使得处理相当大得数字变得非常困难。

	1234567890123456789 * 123;
	// 151851850485185200000 // 计算结果丢失精度

很幸运,BigInt (大整数)就是来解决这个问题。你可以在BigInt上使用于普通数字相同得运算符,例如:+, -, *, %等等。
创建 BigInt 类型得值也很简单,只需要在数字后面加上 n 即可。

	const aNumber = 111;
	const aBigInt = BigInt(aNumber);
	aBigInt === 111n;//true
	typeof aBigInt === 'bigint'; //true
	typeof 111 // 'number';
	typeof 111n // 'bigint';
	
	1234567890123456789 * 123n;
	//输出 151851850485185185047n

不过还是会有一个问题,在大多数操作中,不能将 BigInt 和 Number 混合使用。比较 Number 和 BigInt 是可以的,但是不能把他们相加。

	1n < 2 //true
	1n+2
	//Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions

这个属性只能在最新得 Chrome 和 Node.js 中使用。

剩下三个,在下次再和大家分享。

参考文章:

New JavaScript Features Coming in ES2020 That You Can Use Now。
7 Exciting New JavaScript Features You Need to Know

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值