七种武器: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开发者们兴奋的一年,越来越多的特性提案将被最 ...
随机推荐
- 解析XML内容到User对象
users.xml <?xml version="1.0" encoding="UTF-8"?> <xml-root> <conn ...
- [转]1.2 java web的发展历史
前言 了解java web的发展历史和相关技术的演进历程,非常有助于加深对java web技术的理解和认识. 阅读目录 1.Servlet的出现 2.Jsp的出现 3.倡导了MVC思想的Servlet ...
- H3C使用ping命令
- 使用exp/imp 在oracle数据库间导数据
最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...
- 前端工具--利用Adblock Plus阻止js执行
今天遇到个问题:需要阻止页面某个js的运行 效果达到
- C++Review7_STL、容器、迭代器
我之前的博文中有专门的5篇整理并介绍了STL的概念: STL1——整体介绍:https://www.cnblogs.com/grooovvve/p/10467794.html STL2——泛型编程(模 ...
- linux下文件的一些文件颜色的含义
红色---->代表压缩文件 红色闪烁---->代表链接文件有问题 黄色---->代表设备文件 深蓝色---->代表目录 浅蓝色----->代表链接文件 绿色----> ...
- IDEA比较实用的插件之翻译插件(Translation)
插件名称:Translation 安装步骤:Mac 2019.2的IDEA安装步骤如下 InteIIij IDEA --> Preference --> Other Setting --& ...
- DRF 06
目录 视图家族 views视图类 mixin视图工具类 generics工具视图类 viewsets视图集 路由配置 视图家族 views视图类 APIView """ ...
- Eclipse+Tomcat+MAVEN开发环境配置
https://blog.csdn.net/zhshulin/article/details/30779873 补充: 1.eclipse配置tomcat window——preferences——s ...