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. 【codeforces 761B】Dasha and friends

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  2. v-for(:key)绑定index、id、key的区别

    Vue 2.0 v-for 响应式key, index及item.id参数对v-bind:key值造成差异研究 在github上阅览README.md以获得最佳阅读体验,点这里 v-for响应式key ...

  3. JS与JSP分别是什么

    JS:JavaScript: JSP:Java Server Pages. jsp:只是servlet的一个变种,方便书写html内容才出现的,servlet是根本,所有jsp能做的,servlet全 ...

  4. vue-learning:19 - js - filters

    filters 基本使用 仅限在插值{{}}和v-bind指令中使用 管道符|分隔 链式调用 传入参数 全局注册和局部注册 纯函数性质(不能使用this) 基本使用 我们看下之前用计算属性实现的例子, ...

  5. 牛客多校第四场sequence C (线段树+单调栈)

    牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...

  6. 浅解 go 语言的 interface(许的博客)

    我写了一个 go interface 相关的代码转换为 C 代码的样例.也许有助于大家理解 go 的 interface.不过请注意一点,这里没有完整解析 go 语言 interface 的所有细节. ...

  7. Web_telnet 通过JAVA实现网页上面的命令行远程工具 以及对于流的理解

    前言 这几天研究了一下如何在web页面上通过telnet 连接一个远程的机器,通过命令行进行控制,让然,B/S架构的项目,如果直接通过 浏览器是无法和远程机器进行通信的,我们就得借助后端来帮助实现这样 ...

  8. Javascript事件系统

    本文内容 事件基础 事件监听方式 事件默认行为 事件冒泡与事件捕获 事件绑定与事件委托 事件基础 注意:本文不会深入探究Javascript的事件循环. 提到事件,相信每位Javascript开发者都 ...

  9. $loj$10222 佳佳的$Fibonacci$ 矩阵快速幂

    正解:矩阵快速幂 解题报告: 我永远喜欢loj! 一看到这个就应该能想到矩阵快速幂? 然后就考虑转移式,发现好像直接想不好想,,,主要的问题在于这个*$i$,就很不好搞$QAQ$ 其实不难想到,$\s ...

  10. $Poj1934\ Trip$ 线性$DP+$搜索

    Luogu Description 爱丽丝和鲍伯想去度假,他们每个人都制定了一个参观城市的清单,该地区正好有26个城市,因此它们被编码为小写字母“a”到“z”.清单上可能重复出现某个城市.因为他们想一 ...