JavaScript 2024新變化簡介

banq發表於2024-10-15

JavaScript 一直在不斷發展,每年都在不斷改進,讓開發人員的工作更輕鬆,編碼效率更高。但您是否想過這些變化是如何發生的?誰在幕後做出所有決定?在本文中,我們將深入探討這些問題,並看看一些令人興奮的提議變化。

JavaScript 的標準化
故事時間到了!1995 年, Netscape 的Brendan Eich開發了一種名為 JavaScript 的新語言。這是一種指令碼語言,旨在使網頁更具互動性和動態性,因為它可以直接在瀏覽器中執行。

微軟大約在同一時間意識到他們需要一種類似的指令碼語言用於 Internet Explorer,因此他們想出了Jscript,這是微軟自己對 JavaScript 的實現,並以此命名以避免商標問題。

那麼這是否意味著 JavaScript 是由私人組織維護和實施的?幸運的是,不是的。

1996 年,Netscape 與ECMA接洽,希望對 JavaScript 語言進行標準化。其目標是確保所有瀏覽器都實現該語言的相同核心功能,這樣開發人員就不必費心編寫在不同平臺上一致執行的程式碼。

ECMA 國際的作用
ECMA 國際是一個非營利性標準組織,負責監督多項技術的開發和標準化。該組織成立於 1961 年,當時的名稱為歐洲計算機制造商協會(ECMA)。

1996 年, ECMAScript誕生,它是 JavaScript、Jscript 和許多其他 JavaScript 子語言的標準基礎。ECMAScript 這個名字基本上是參與標準化該語言的組織(尤其是 Netscape 和 Microsoft)之間的妥協。

ECMAScript 的第一版於 1997 年 6 月由 ECMA 大會透過。此後,該語言標準已釋出了多個版本。2016 年之後,JavaScript(ECMAScript)的新特性每年都會推出。

但是誰來提出、確定並且最重要的是實施這些變化呢?

TC39
技術委員會39 (TC39) 介入了這一工作。它是 ECMA 的一個小組,負責發展 ECMAScript。語言專家、獨立開發者以及 Google、Microsoft、Mozilla、Apple 等主要科技公司的代表是 TC39 的部分成員。每家公司的參與都確保 JavaScript 在各種平臺上保持穩健、多功能和麵向未來。

TC39 的優勢在於其開放性。所有提案和會議記錄均公開,社群反饋對變更起著重要作用。來自世界各地的開發人員都可以在 GitHub 上提供提案、反饋或以觀察員身份參加會議。

在 TC29 中,遵循一系列長期而謹慎的步驟來規劃和實施 JavaScript 的新變化。

第 0 階段:Strawman稻草人
第一階段,提案以粗略想法的形式提出。此時,提案尚無正式價值,僅僅是社群討論的焦點。
示例:開發人員可能會提出一種用於解構物件的新語法,但不提供詳細規範。

第二階段:草案
現在該提案已得到進一步發展,正式規範開始成形。關於提議功能的語法、語義和行為的細節已得到完善和記錄。

結果:該草案可能會由 TC39 審查,並尋求反饋以解決任何問題。

第三階段:候選階段
這是一個關鍵階段,提案在此階段被視為穩定並準備實施。規範已成熟,預計該功能將按預期執行。

在此階段,JavaScript 引擎(如 Chrome 的 V8、Firefox 的 SpiderMonkey 或 Safari 的 JavaScriptCore)中必須至少有一個完整的實現,以證明該功能可以有效實現。

一旦在此階段獲得批准,該提案就可以納入下一版本的 ECMAScript 標準中。

第四階段:完成
在最後階段,該提案已經過徹底審查、實施並被納入 ECMAScript 規範。

該功能將成為 ECMAScript 官方標準的一部分,幷包含在下一個年度版本中。

ES2024 中的變化
以下是 ECMAScript 2024 帶來的一些變化:

1. 時間 API
更新後的 Temporal API 解決了現有 Date 物件的限制,提供了處理日期和時間的現代方法。

這是來自時間 API 提案的一個塊:

上述一些問題在 date 的當前實現中是可以修復的。可以透過向 date 新增新的工廠函式來緩解時區支援的不足 — 比如:

var zonedDate = Date.inZone(zoneIdentifier, dateString);

這種技術可能也可以用來支援非公曆:

var calendarDate = Date.withCalendar('Hijri', dateString);

同樣,我們可以向 Date 新增 API,使計算更加容易。例如,現在無法新增或減去時間,而是必須執行獲取/設定行為。向日期新增一週的操作如下:

var myDate = new Date();

myDate.setDate(myDate.getDate() + 7);

addDays()不過,指定一種方法來讓事情變得更好一點,這並不是什麼大問題:

var myDate = new Date();

myDate.addDays(7);

應用程式: Temporal 增強了日期時間操作,提供了建立、比較和格式化日期和時間的方法,這對於處理時間敏感資料的應用程式至關重要。

2. 格式正確的 Unicode 字串
此功能旨在增強 Unicode 字串的處理能力,確保它們在不同環境中格式正確且一致。這對於國際化和正確表示不同的字符集至關重要。

該toWellFormed()方法將具有無效序列(單獨代理)的字串轉換為有效的 Unicode 字串,並用 Unicode 替換字元替換它們。

3. 頂層 Await
概述:頂層 await 功能允許await在模組頂層使用關鍵字,從而可以更直接地編寫非同步程式碼,而無需將其包裝在非同步函式中。

const obj = await  getJson ( ); 
console.log ( obj );

4. 管道Pipeline Operator
概述:管道運算子 ( |>) 允許使用函數語言程式設計風格,將一個函式的結果作為下一個函式的輸入。這在連結多個函式呼叫時提高了程式碼的可讀性。

const val = - 10
   |> (n =>  Math.max ( 0 , n ))  |> (n = > Math.pow(n,1 / 3))|   > Math.ceil;

 
應用:該運算子簡化了複雜的資料轉換和操作,使程式碼更易於理解並減少巢狀。
 

相關文章