以下是您提供的文本的繁體中文翻譯:

ECMAScript 2021

# JavaScript - ECMAScript 2021:初學者指南

你好,未來的編程超新星!我很興奮能成為您進入ECMAScript 2021世界的導師。作為一位具有多年經驗的計算機科學老師,我見過無數學生從完全的初學者變成自信的程序员。今天,我們將探索JavaScript的最新功能,我答應讓這一切盡可能有趣且容易理解。所以,拿起你喜歡的飲料,放鬆一下,讓我們一起深入探討!

## ECMAScript 2021是什麼?

在我們深入了解新功能之前,讓我們先快速了解一下ECMAScript是什麼。把ECMAScript想成是JavaScript的菜譜書。每年,廚師們(也就是語言開發者)都會添加新的菜譜(功能),讓我們的編碼生活更加輕鬆和美味。ECMAScript 2021,也被稱為ES12,是這本菜譜書的最新版。

## ECMAScript 2021新增的功能

ECMAScript 2021為我們提供了一些令人興奮的新工具來玩。這就像拿到了一套閃亮的新樂高積木來添加到我們的收藏中。讓我們一一探索這些新功能。

### 數字分隔符 (_)

你有沒有嘗試過閱讀一個非常長的數字,比如1000000000?這有點頭痛,對吧?現在,數字分隔符來拯救我們了!

```javascript
// 沒有數字分隔符
const billion = 1000000000;

// 有數字分隔符
const billionReadable = 1_000_000_000;

console.log(billion === billionReadable); // 輸出:true

1_000_000_000中的下劃線(_)不會改變數字的值。它只是在那裡幫助我們這些人類閱讀。這不是很棒嗎?這就像在長句子中添加空格來使其更易於閱讀。

Promise any() 方法

JavaScript中的Promise就像同時打很多電話並等待有人接聽。Promise.any()方法是處理多個Promise的新方法。

const promise1 = new Promise((resolve, reject) => setTimeout(reject, 100, 'promise1'));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 200, 'promise2'));
const promise3 = new Promise((resolve, reject) => setTimeout(resolve, 300, 'promise3'));

Promise.any([promise1, promise2, promise3])
  .then((value) => console.log(value))
  .catch((error) => console.log(error));

// 輸出:promise2

在這個例子中,Promise.any()在数组中的任何一个Promise被滿足時就會解析。這就像一場比賽,我們只關心第一個衝過終點線的人,無論第二或第三名是誰。

String replaceAll() 方法

你有沒有玩過文字替換遊戲?replaceAll()方法就像是這樣,但是對於JavaScript中的字符串。

const sentence = "我喜歡貓。貓是偉大的寵物。";
const newSentence = sentence.replaceAll("貓", "狗");

console.log(newSentence); // 輸出: "我喜歡狗。狗是偉大的寵物。"

replaceAll()之前,我們必須使用正則表達式或循環來替換子字符串的所有出現。現在,只需調用一個方法就可以了!

邏輯賦值運算符

ECMAScript 2021引入了三個新的邏輯賦值運算符。這些就像是JavaScript中常見模式的簡寫形式。讓我們看看每一個:

邏輯AND賦值(&&=)運算符

let x = 1;
let y = 2;

x &&= y;

console.log(x); // 輸出:2

// 這等價於:
// x && (x = y);

&&=運算符只在左值為真時賦予右值。這就像說,“如果x是真,那麼讓它等於y。”

邏輯OR賦值(||=)運算符

let a = null;
let b = '默認值';

a ||= b;

console.log(a); // 輸出:"默認值"

// 這等價於:
// a || (a = b);

||=運算符只在左值為假時賦予右值。這對於設置默認值來說非常完美!

空值合并賦值(??=)運算符

let foo = null;
let bar = 'baz';

foo ??= bar;

console.log(foo); // 輸出:"baz"

// 這等價於:
// foo ?? (foo = bar);

??=運算符只在左值為null或undefined時賦予右值。它與||=相似,但對“空”的定義更加專門。

方法總結

這裡有一個方便的表格,總結了我們學到的新的方法:

方法 描述 示例
數字分隔符 讓大數字更易於閱讀 1_000_000_000
Promise.any() 當数组中的任何Promise滿足時解析 Promise.any([promise1, promise2, promise3])
String.replaceAll() 替換字符串中的所有出現 "hello hello".replaceAll("hello", "hi")
&&= 如果左邊是真則賦值 x &&= y
||= 如果左邊是假則賦值 x \|\|= y
??= 如果左邊是null或undefined則賦值 x ??= y

好了,各位!我們已經一起探索了ECMAScript 2021的令人興奮的新功能。記住,學習編程最好的方式是實踐。所以,我鼓勵你們去玩這些新功能,嘗試,最重要的是,玩得開心!

正如我以前的編程教授常說的,“編程就像烹飪。起初你可能會燒焦一些菜,但隨著練習,你很快就能創作出傑作!”所以不要害怕犯錯誤——它們都是學習過程的一部分。

持續編碼,保持好奇心,並且學習愉快!

Credits: Image by storyset