七种武器:JavaScript 新特性闪亮登场
JavaScript(或ECMA Script) 是一门不断发展的语言,有许多关于如何前进的建议和想法。TC39(技术委员会39)是负责定义JS标准和特性的委员会,今年他们非常活跃。以下是目前处于“Stage 3阶段”的一些提案摘要,这是“完成”之前的最后一个阶段。这意味着这些特性将很快在浏览器和其他引擎中实现。事实上,其中一些现在就有了。
1. 私有字段#
Chrome 和 NodeJS 12 已支持
是的,你没看错。JS终于在类中支持私有字段了。不再有 this._doPrivateStuff()、定义闭包来存储私有值或者使用WeakMap来间接实现私有属性。
语法是这样的:
// 私有字段必须以 '#' 开头
// and they can't be accessed outside the class block
class Counter {
#x = 0;
#increment() {
this.#x++;
}
onClick() {
this.#increment();
}
}
const c = new Counter();
c.onClick(); // 正常
c.#increment(); // 出错
提案: https://github.com/tc39/proposal-class-fields
2. 可选链式调用 ?.
以往需要访问嵌套在对象内部好几层的属性时,会得到臭名昭著的错误Cannot read property 'stop' of undefined。然后你就要改变代码来处理属性链中每一个可能的undefined对象,比如:
const stop = please && please.make && please.make.it && please.make.it.stop;
// 或者使用 'object-path' 这样的库
const stop = objectPath.get(please, "make.it.stop");
有了可选链式调用 ,你只要这样写就可以做同样的事情:
const stop = please?.make?.it?.stop;
提案: https://github.com/tc39/proposal-optional-chaining
3. 空合并操作符 ??
变量的可选值可能没有,如果没有则使用默认值。这种情况很常见:
const duration = input.duration || 500;
使用||的问题是,它会覆盖所有的假值,如(0, '', false),这些值可能是在某些情况下有效的输入。
输入空合并操作符,它只覆盖undefined或null。
const duration = input.duration ?? 500;
提案: https://github.com/tc39/proposal-nullish-coalescing
4. BigInt 1n
Chrome 和 NodeJS 12 已支持
JS在数学方面一直很糟糕的一个原因是,我们无法可靠地存储大于2 ^ 53的数字,这使得处理相当大的数字非常困难。幸运的是,BigInt是解决这个特定问题的提案。
// 可以通过附加'n'到一个数字字面量来定义BitInt
const theBiggestInt = 9007199254740991n;
// 使用构造器
const alsoHuge = BigInt(9007199254740991);
// 或则字符串形式
const hugeButString = BigInt('9007199254740991');
你也可以在BigInt上使用与普通数字相同的运算符,例如 +, -, /, *, %等等。不过有一个问题,在大多数操作中,不能将 BigInt与Number混合使用。比较Number和 BigInt是可以的,但是不能把它们相加。
1n < 2
// true
1n + 2
//
七种武器:JavaScript 新特性闪亮登场的更多相关文章
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- ansible七种武器和json
ansible七种武器和json • 第一种武器 – ansible 命令,用于执 ...
- 百度云世界里的“七种武器”:PCS、BAE、Site App、ScreenX等
如果说去年百度世界的关键词是“百度新首页”的话,那么今年在研发者人群中,对百度世界最深的印象就是“七种武器”,即在云的世界里,百度为开发者所提供的包括个人云存储.LBS.移动云测试中心等在内的七种工具 ...
- UNIX/Linux C 程序员需要掌握的七种武器
我是一名普通的软件工程师,不是什么技术大牛.这篇文章所提到的"七种武器"只是我这些年工作经验的一点体会和感悟,如果有错误的地方,还请大家指正. (一)C语言 作为一名C程序员,熟练 ...
- 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)
让 Python 代码更易维护的七种武器 2018/09/29 · 基础知识 · 武器 原文出处: Jeff Triplett 译文出处:linux中国-Hank Chow 检查你的代码的质 ...
- 面试官的七种武器:Java篇
起源 自己经历过的面试也不少了,互联网的.外企的,都有.总结一下这些面试的经验,发现面试官问的问题其实不外乎几个大类,玩不出太多新鲜玩意的.细细想来,面试官拥有以下七种武器.恰似古龙先生笔下的武侠世界 ...
- 快速开发平台分享-UCML快速开发七种武器
传统的快速开发平台强调的是组件重用.构件重用,主要解决功能重用层面,一般提供了软件开发最常用的功能:表单设计.BPM(业务流程管理).报表.组织机构及权限等功能.但只有功能重用,没有过程重用,要么只能 ...
- 7 个令人兴奋的 JavaScript 新特性
前言 一个ECMAScript标准的制作过程,包含了Stage 0到Stage 4五个阶段,每个阶段提交至下一阶段都需要TC39审批通过.本文介绍这些新特性处于Stage 3或者Stage 4阶段,这 ...
- ES6:JavaScript 新特性
我相信,在ECMAScript.next到来的时候,我们现在每天都在写的JavaScript代码将会发生巨大的变化.接下来的一年将会是令JavaScript开发者们兴奋的一年,越来越多的特性提案将被最 ...
随机推荐
- uni-app学习记录01-pages配置项
{ // 每个页面都需要在pages里面去声明配置 "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/coll ...
- webpack学习(五)entry和output的基础配置
1:entry和output就是打包的入口和出口的两个对象.但是如果入口文件就一个的话(应该说只希望打包出一个脚本文件), entry直接跟一个字符串(入口文件路径)就可以了.如:entry : &q ...
- git卡在Resolving deltas 100%的解决办法
很多同学都有这样的问题.不知道是git的问题,还是tortoisegit的问题. 我的版本: Git-1.8.4-preview20130916 TortoiseGit-1.8.6.0-32bit 已 ...
- 3-7 彻底搞清楚unicode和utf8编码
- H3C 高级ACL
- Python--day36--操作系统的作用;多道技术;
- POJ 1236 Network of Schools(tarjan)
Network of Schools Description A number of schools are connected to a computer network. Agreements h ...
- H3C FTP主动数据传输方式
- 与正则有关的JS方法结合其在项目中的应用
与正则有关的JS方法结合其在项目中的应用 前言 最近项目中用到正则匹配比较多,因此打算深入理解和总结下各个与正则有关的方法,再结合在项目中使用的情况.与正则有关的JS方法共有7个,分别是RegExp对 ...
- 【35.12%】【POJ 1988】Cube Stacking
Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 24007 Accepted: 8432 Case Time Limit: 100 ...