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),这些值可能是在某些情况下有效的输入。

输入空合并操作符,它只覆盖undefinednull

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上使用与普通数字相同的运算符,例如 +-/*%等等。不过有一个问题,在大多数操作中,不能将 BigIntNumber混合使用。比较Number和 BigInt是可以的,但是不能把它们相加。

1n < 2
// true 1n + 2
//

七种武器:JavaScript 新特性闪亮登场的更多相关文章

  1. 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 ...

  2. ansible七种武器和json

                                                               ansible七种武器和json • 第一种武器 – ansible 命令,用于执 ...

  3. 百度云世界里的“七种武器”:PCS、BAE、Site App、ScreenX等

    如果说去年百度世界的关键词是“百度新首页”的话,那么今年在研发者人群中,对百度世界最深的印象就是“七种武器”,即在云的世界里,百度为开发者所提供的包括个人云存储.LBS.移动云测试中心等在内的七种工具 ...

  4. UNIX/Linux C 程序员需要掌握的七种武器

    我是一名普通的软件工程师,不是什么技术大牛.这篇文章所提到的"七种武器"只是我这些年工作经验的一点体会和感悟,如果有错误的地方,还请大家指正. (一)C语言 作为一名C程序员,熟练 ...

  5. 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)

    让 Python 代码更易维护的七种武器 2018/09/29 · 基础知识 · 武器 原文出处: Jeff Triplett   译文出处:linux中国-Hank Chow    检查你的代码的质 ...

  6. 面试官的七种武器:Java篇

    起源 自己经历过的面试也不少了,互联网的.外企的,都有.总结一下这些面试的经验,发现面试官问的问题其实不外乎几个大类,玩不出太多新鲜玩意的.细细想来,面试官拥有以下七种武器.恰似古龙先生笔下的武侠世界 ...

  7. 快速开发平台分享-UCML快速开发七种武器

    传统的快速开发平台强调的是组件重用.构件重用,主要解决功能重用层面,一般提供了软件开发最常用的功能:表单设计.BPM(业务流程管理).报表.组织机构及权限等功能.但只有功能重用,没有过程重用,要么只能 ...

  8. 7 个令人兴奋的 JavaScript 新特性

    前言 一个ECMAScript标准的制作过程,包含了Stage 0到Stage 4五个阶段,每个阶段提交至下一阶段都需要TC39审批通过.本文介绍这些新特性处于Stage 3或者Stage 4阶段,这 ...

  9. ES6:JavaScript 新特性

    我相信,在ECMAScript.next到来的时候,我们现在每天都在写的JavaScript代码将会发生巨大的变化.接下来的一年将会是令JavaScript开发者们兴奋的一年,越来越多的特性提案将被最 ...

随机推荐

  1. navicat ssh通道受限问题处理

    navicat 链接数据库 使用navicat 的ssh通道连接数据库回遇到权限问题 错误代码如下: 80070007: SSH Tunnel: Server does not support dif ...

  2. java 布局管理器

    容器中的组件的排放方式,就是布局. 常见的布局管理器: FlowLayout(流式布局管理器)//目前最常用的 从左到右的顺序排列. Panel默认的布局管理器. BorderLayout(边界布局管 ...

  3. H3C 根据主机地址数划分子网

  4. 2018-10-19-C#-AddRange-添加位置

    title author date CreateTime categories C# AddRange 添加位置 lindexi 2018-10-19 9:3:8 +0800 2018-2-13 17 ...

  5. Activiti工作流引擎学习(一)

    1.部署对象和流程定义相关表:RepositoryService act_re_deployment: 部署对象表:一次部署的多个文件的信息,对于不需要的流程可以删除和修改 act_re_procde ...

  6. 2018-2-13-Visual-studio-C#-代码使用-NotNull

    title author date CreateTime categories Visual studio C# 代码使用 NotNull lindexi 2018-2-13 17:23:3 +080 ...

  7. CITRIX ADC配置SSL卸载

    如上图,将ssl的加密解密放在前端的负载均衡设备上,客户端到VPX的访问都是加密的,VPX到后端的服务器都是http的 Step1:上传证书到VPX,如下图: Step2:创建SSL的虚拟服务器并且绑 ...

  8. 【Linux】CentOS 7.5 修改时区

    1⃣️查看当前CentOS系统版本: [parallels@k8s-node2 ~]$ cat /etc/redhat-release CentOS Linux release 7.5.1804 (C ...

  9. (转)hibernate缓存机制详细分析

    在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相 ...

  10. 027.MFC_映射消息

    映射消息MFC中的消息映射宏 DECLARE_MESSAGE_MAP BEGIN_MEASSAGE_MAP END_MESSAGE_MAP向导自动映射消息手动添加映射消息 MFC会帮我们自动映射大部分 ...