成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ECMASCript 2019可能會(huì)有哪些特性?

tuantuan / 739人閱讀

摘要:可能不會(huì)包括所有的語法提案。事實(shí)上,有些提案已經(jīng)被擱置很多年了。因此,很可能也會(huì)在今年月份發(fā)布。

譯者按: 又過了1年...

原文:What"s New in JavaScript for 2019

譯者: Fundebug

為了保證可讀性,本文采用意譯而非直譯。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。

最近這些年,ECMASCript標(biāo)準(zhǔn)發(fā)展節(jié)奏非常穩(wěn)定,每年都會(huì)發(fā)布新的特性。那么,ECMASCript 2019可能會(huì)有哪些特性呢?

ECMASCript語法提案的批準(zhǔn)流程

JavaScript的標(biāo)準(zhǔn)即為ECMAScript,其標(biāo)準(zhǔn)委員會(huì)是TC39。

所有語法提案都需要經(jīng)歷標(biāo)準(zhǔn)的批準(zhǔn)流程,該流程包括5個(gè)階段:

Stage 0 - Strawman(展示階段)

Stage 1 - Proposal(征求意見階段)

Stage 2 - Draft(草案階段)

Stage 3 - Candidate(候選階段)

Stage 4 - Finished(定案階段)

只有語法特性到達(dá)Stage 4,該特性才能成為正式的ECMAScript標(biāo)準(zhǔn)。但是,JS引擎例如V8(Chrome和Node.js)以及SpiderMonkey(Firefox)會(huì)試驗(yàn)性地支持Stage 4之前的語法特性,這樣開發(fā)者可以進(jìn)行測(cè)試和反饋。

當(dāng)我寫這篇博客的時(shí)候,還沒有新的Stage 4的語法提案,處于Stage 3的語法提案有好幾個(gè)。ES2019可能不會(huì)包括所有Stage 3的語法提案。事實(shí)上,有些提案已經(jīng)被擱置很多年了。

Class相關(guān)變化

有好幾個(gè)提案是針對(duì)Class的,包括:

屬性定義

私有方法及屬性

靜態(tài)方法及屬性

代碼示例如下:

class Truck extends Automobile {
  model = "Heavy Duty"; // 公有屬性
  #numberOfSeats = 5; // 私有屬性
  #isCrewCab = true;
  static #name = "Truck"; // 靜態(tài)私有屬性

  // 靜態(tài)方法
  static formattedName() {
    return `This vehicle is a ${ Truck.#name }.`;
  }

  constructor( model, seats = 2 ) {
    super();
    this.seats = seats;
  }

  // 私有方法
  #getBodyType() {
    return this.#isCrewCab ? "Crew Cab" : "Standard Cab";
  }

  bodyType() {
    return `${ this.#numberOfSeats }-passenger ${ this.model } ${ this.#getBodyType() }`;
  }

  get seats() { return this.#numberOfSeats; }
  set seats( value ) {
    if ( value >= 1 && value < 7 ) {
      this.#numberOfSeats = value;
      this.#isCrewCab = value > 3;
    }
  }
}

個(gè)人認(rèn)為,使用#來定義私有成員不是很好,學(xué)習(xí)其他語言,使用private來定義顯然更好。

String的trimStart()與trimEnd()方法

String有一個(gè)trim()方法可以移除字符串開頭和結(jié)尾的空格,而trimStart()與trimEnd()方法則可以分別移除開頭和結(jié)尾的空格:

const one = "      hello and let ";
const two = "us begin.        ";
console.log( one.trimStart() + two.trimEnd() ) // 打印"hello and let us begin."

有趣的是,不少瀏覽器已經(jīng)支持了這2個(gè)方法??梢?,瀏覽器們一直在推動(dòng)ECMASCript標(biāo)準(zhǔn)的進(jìn)步。

使用BigInt定義大整數(shù)

Number所能定義的最大整數(shù)為2^53 ,對(duì)于更大數(shù),則可以使用BigInt來定義:

// 最大的Number
const theBiggestIntegerToday = Number.MAX_SAFE_INTEGER; // 9007199254740991

// 在整數(shù)后面添加n來定義BigInt
const ABiggerInteger = 9100000000000001n;

// 使用BigInt()
const EvenBigger = BigInt( 9100000000000002 ); // 9100000000000002n

// 使用BigInt()
const SuchBigWow = BigInt( "9100000000000003" ); // 9100000000000003n

關(guān)于BigInt的更多使用示例,可以查看BigInt: arbitrary-precision integers in JavaScript

Array的flat()與flatMap()方法

如果你學(xué)習(xí)過函數(shù)式編程,那么你應(yīng)該知道flat()和flatMap()。flat()可以將一個(gè)包含嵌套數(shù)組的數(shù)組變換為一維數(shù)組。

const nestedArraysOhMy = [ "a", ["b", "c"], ["d", ["e", "f"]]];
// flat()的參數(shù)為數(shù)組的嵌套深度
const ahhThatsBetter = nestedArraysOhMy.flat( 2 );
console.log( ahhThatsBetter ); // [ "a", "b", "c", "d", "e", "f" ]

flatMap()與map()類似,當(dāng)回調(diào)函數(shù)返回?cái)?shù)組時(shí),flatMap()返回的是一維數(shù)組,而map()返回的是嵌套數(shù)組:

const scattered = [ "my favorite", "hamburger", "is a", "chicken sandwich" ];

const huh = scattered.map( chunk => chunk.split( " " ) );
console.log( huh ); // [ [ "my", "favorite" ], [ "hamburger" ], [ "is", "a" ], [ "chicken", "sandwich" ] ]

const better = scattered.flatMap( chunk => chunk.split( " " ) );
console.log( better ); // [ "my", "favorite", "hamburger", "is", "a", "chicken", "sandwich" ]
其他ES2019候選特性

這些是當(dāng)前的Stage 3候選特性:

globalThis

動(dòng)態(tài)import()

遺留的RegExp特性 features

import.meta

String的matchAll()方法

Object.fromEntries()

規(guī)范JSON.stringify

標(biāo)準(zhǔn)化命令行程序的Hashbang

ES2019什么時(shí)候發(fā)布?

過去幾年,TC39通常在6月份發(fā)布ECMAScript標(biāo)準(zhǔn)。因此,ES2019很可能也會(huì)在今年6月份發(fā)布。

如何試用ES2019特性?

其實(shí)有些特性其實(shí)JS引擎已經(jīng)支持了,我們只需要配置一下就好了。

使用Node.js 11

Node.js使用V8引擎,而V8引擎已經(jīng)支持了一些最新的特性,例如Array.prototype.flat和String.prototype.trimEnd,因此使用最新版的Node.js,即Node.js 11即可試用這些特性。

我使用的Node.js版本為11.8.0:

node -v
v11.8.0

如果要啟用某個(gè)特性,可以使用node命令的--harmony-{feature-flag}選項(xiàng)。使用--v8-options,則可以查看node命令的所有選項(xiàng),一些實(shí)驗(yàn)性的特性被標(biāo)記為"in progress"。

macOS / Linux

node --v8-options | grep "in progress"
  --harmony-do-expressions (enable "harmony do-expressions" (in progress))
  --harmony-class-fields (enable "harmony fields in class literals" (in progress))
  --harmony-static-fields (enable "harmony static fields in class literals" (in progress))
  --harmony-await-optimization (enable "harmony await taking 1 tick" (in progress))
  --harmony-locale (enable "Intl.Locale" (in progress))
  --harmony-intl-list-format (enable "Intl.ListFormat" (in progress))
  --harmony-intl-relative-time-format (enable "Intl.RelativeTimeFormat" (in progress))

Windows

node --v8-options | find "in progress"

例如,當(dāng)我們的Node.js代碼index.js中的Class有靜態(tài)方法,則在執(zhí)行的時(shí)候添加--harmony-static-fields選項(xiàng)即可:

node --harmony-class-fields --harmony-static-fields index.js
使用Babel 7.0 +

使用Babel,我們就可以使用最新的JavaScript語法了,因?yàn)樗鼤?huì)對(duì)代碼進(jìn)行轉(zhuǎn)換以兼容舊的瀏覽器。

Babel支持通過一些插件來支持實(shí)驗(yàn)性的JS特性。Babel所支持的ECMAScript特性提案可以查看babel/proposals倉庫。

參考

Learn JavaScript in 2019!

The History (and Future) of Asynchronous JavaScript

Build a Secure Node.js Application with JavaScript Async Await Using Hapi

Use TypeScript to Build a Node API with Express

Standard ECMA-262

關(guān)于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應(yīng)用實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了9億+錯(cuò)誤事件,付費(fèi)客戶有Google、360、金山軟件、百姓網(wǎng)等眾多品牌企業(yè)。歡迎大家免費(fèi)試用!

版權(quán)聲明

轉(zhuǎn)載時(shí)請(qǐng)注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2019/01/30/what-is-new-in-javascript-for-2019/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108964.html

相關(guān)文章

  • Node12有哪些值得關(guān)注的新特性

    摘要:再之后會(huì)有個(gè)月的延長(zhǎng)維護(hù)期。期間支持的變更嚴(yán)重的,嚴(yán)重的安全問題或者文檔更新。已經(jīng)成為協(xié)議的一個(gè)重大更新,并且正在積極地在上集成。此外,默認(rèn)情況下已禁用和,并且?guī)煲褎h除已棄用的函數(shù)。 前言 時(shí)隔一年,Node.js 12 如約而至,正式發(fā)布第一個(gè) Current 版本。它將從2019年10月開始進(jìn)入長(zhǎng)期支持(LTS)版本直到2022年4月。 該版本帶來的新特性: V8 更新帶來好多不...

    kaka 評(píng)論0 收藏0
  • ECMASCRIPT 6 實(shí)戰(zhàn)之 解構(gòu)賦值

    摘要:相信解構(gòu)賦值自以下簡(jiǎn)稱面世以來被大家快速地熟悉并運(yùn)用到實(shí)際開發(fā)中了這是一種能有效減少代碼量,使代碼邏輯更簡(jiǎn)單優(yōu)雅的技術(shù)下面我們就再來回顧總結(jié)一下解構(gòu)賦值的種種用法吧基本用法從對(duì)象解構(gòu)假設(shè)有一個(gè)對(duì)象,它的結(jié)構(gòu)為以對(duì)稱的形式從從邊的對(duì)象中匹配與 相信解構(gòu)賦值(Destructuring)自 ECMASCRIPT 6(以下簡(jiǎn)稱 ES 6) 面世以來被大家快速地熟悉并運(yùn)用到實(shí)際開發(fā)中了, 這是...

    yangrd 評(píng)論0 收藏0
  • 除了Oracle JDK,我們還有哪些選擇?

    摘要:就在昨天,發(fā)布了新版的我相信很多開發(fā)人員沉溺在編碼的樂趣中,還沒注意到相關(guān)消息。 就在昨天,Oracle發(fā)布了新版的JDK 11,我相信很多Java開發(fā)人員沉溺在編碼的樂趣中,還沒注意到相關(guān)消息。 在2017年9月份,Oracle官網(wǎng)發(fā)布了一則博客https://blogs.oracle.com/java... 總結(jié)來說,主要內(nèi)容涉及到: 調(diào)整JAVA SE的版本發(fā)布計(jì)劃節(jié)奏;從JAV...

    李世贊 評(píng)論0 收藏0
  • 什么是 JAVASCRIPT?

    摘要:,微軟發(fā)布,同時(shí)發(fā)布了,該語言模仿同年發(fā)布的。,公司在瀏覽器對(duì)抗中沒落,將提交給國(guó)際標(biāo)準(zhǔn)化組織,希望能夠成為國(guó)際標(biāo)準(zhǔn),以此抵抗微軟。同時(shí)將標(biāo)準(zhǔn)的設(shè)想定名為和兩類。,尤雨溪發(fā)布項(xiàng)目。,正式發(fā)布,并且更名為。,發(fā)布,模塊系統(tǒng)得到廣泛的使用。 前言 作為程序員,技術(shù)的落實(shí)與鞏固是必要的,因此想到寫個(gè)系列,名為 why what or how 每篇文章試圖解釋清楚一個(gè)問題。 這次的 why w...

    ephererid 評(píng)論0 收藏0
  • 前端培訓(xùn)-中級(jí)階段(4)- BOM 瀏覽器對(duì)象模型(2019-07-04期)

    摘要:提供了與瀏覽器窗口進(jìn)行交互的對(duì)象標(biāo)簽之間不會(huì)共享。用于描述當(dāng)前瀏覽器的歷史記錄。表示窗口是否以全屏顯示。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTML/CSS/JS),本著提升技術(shù)水平,打牢基礎(chǔ)知識(shí)的中心思想,我們開課啦(每周四)。 前面我們已經(jīng)基本掌握常規(guī)的語法語義,以及基...

    smallStone 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<