日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

ECMAScript 2024 正式發(fā)布,新特性一覽!

來(lái)源: 責(zé)編: 時(shí)間:2024-06-28 17:12:30 222觀看
導(dǎo)讀2024 年 6 月 26 日,第 127 屆 ECMA 大會(huì)正式批準(zhǔn)了 ECMAScript 2024 語(yǔ)言規(guī)范,這意味著它現(xiàn)在正式成為最新 ECMAScript 標(biāo)準(zhǔn)。圖片下面就來(lái)看看 ECMAScript 2024 都有哪些新特性吧!Promise.withResolvers()Object.group

2024 年 6 月 26 日,第 127 屆 ECMA 大會(huì)正式批準(zhǔn)了 ECMAScript 2024 語(yǔ)言規(guī)范,這意味著它現(xiàn)在正式成為最新 ECMAScript 標(biāo)準(zhǔn)。jAL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jAL28資訊網(wǎng)——每日最新資訊28at.com

下面就來(lái)看看 ECMAScript 2024 都有哪些新特性吧!jAL28資訊網(wǎng)——每日最新資訊28at.com

  • Promise.withResolvers()
  • Object.groupBy / Map.groupBy
  • String:isWellFormed() / toWellFormed()
  • ArrayBuffer:resize / transfer
  • Atomics.waitAsync()
  • 正則表達(dá)式 v 標(biāo)志

Promise.withResolvers()

Promise.withResolvers() 允許創(chuàng)建一個(gè)新的 Promise,并同時(shí)獲得 resolve 和 reject 函數(shù)。jAL28資訊網(wǎng)——每日最新資訊28at.com

Promise.withResolvers() 等同于以下代碼,不過(guò)代碼會(huì)更簡(jiǎn)潔:jAL28資訊網(wǎng)——每日最新資訊28at.com

let resolve, reject;const promise = new Promise((res, rej) => {  resolve = res;  reject = rej;});

通常,當(dāng)創(chuàng)建一個(gè)新的 Promise 時(shí),會(huì)傳遞一個(gè)執(zhí)行器函數(shù)給 Promise 構(gòu)造函數(shù),這個(gè)執(zhí)行器函數(shù)接收兩個(gè)參數(shù):resolve 和 reject 。但在某些情況下,可能想要在 Promise 創(chuàng)建之后仍然能夠訪問(wèn)到這兩個(gè)函數(shù)。這就是 Promise.withResolvers() 的用武之地。jAL28資訊網(wǎng)——每日最新資訊28at.com

使用 Promise.withResolvers() 的例子:jAL28資訊網(wǎng)——每日最新資訊28at.com

const { promise, resolve, reject } = Promise.withResolvers();    // 在這里可以使用 resolve 和 reject 函數(shù)  setTimeout(() => resolve('成功!'), 8000);    promise.then(value => {    console.log(value); // 輸出: 成功!  });

使用 Promise.withResolvers() 關(guān)鍵的區(qū)別在于resolve 和 reject函數(shù)現(xiàn)在與 Promise 本身處于同一作用域,而不是在執(zhí)行器中被創(chuàng)建和一次性使用。這可能使得一些更高級(jí)的用例成為可能,例如在重復(fù)事件中重用它們,特別是在處理流和隊(duì)列時(shí)。這通常也意味著相比在執(zhí)行器內(nèi)包裝大量邏輯,嵌套會(huì)更少。這個(gè)方法對(duì)于那些需要更細(xì)粒度控制 Promise 的狀態(tài),或者在 Promise 創(chuàng)建后仍然需要訪問(wèn) resolve 和 reject 函數(shù)的場(chǎng)景來(lái)說(shuō)非常有用。jAL28資訊網(wǎng)——每日最新資訊28at.com

瀏覽器支持:jAL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jAL28資訊網(wǎng)——每日最新資訊28at.com

Object.groupBy() / Map.groupBy()

Object.groupBy() 和 Map.groupBy() 方法用于數(shù)組分組。jAL28資訊網(wǎng)——每日最新資訊28at.com

假設(shè)有一個(gè)由表示水果的對(duì)象組成的數(shù)組,需要按照顏色進(jìn)行分組。以前可以使用forEach循環(huán)來(lái)實(shí)現(xiàn),代碼如下:jAL28資訊網(wǎng)——每日最新資訊28at.com

const fruits = [    { name: "Apple", color: "red" },    { name: "Banana", color: "yellow" },    { name: "Cherry", color: "red" },    { name: "Lemon", color: "yellow" },    { name: "Grape", color: "purple" },  ];const fruitsByColor = {};  fruits.forEach(fruit => {    const color = fruit.color;    if (!fruitsByColor[color]) {      fruitsByColor[color] = [];    }    fruitsByColor[color].push(fruit);  }); console.log(fruitsByColor);

輸出結(jié)果如下:jAL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jAL28資訊網(wǎng)——每日最新資訊28at.com

也可以使用reduce方法:jAL28資訊網(wǎng)——每日最新資訊28at.com

const fruitsByColor = fruits.reduce((acc, fruit) => {    const color = fruit.color;    if (!acc[color]) {      acc[color] = [];    }    acc[color].push(fruit);    return acc;  }, {});

無(wú)論哪種方式,代碼都略顯繁瑣。每次都要檢查對(duì)象,看分組的 key 是否存在,如果不存在,則創(chuàng)建一個(gè)空數(shù)組,并將項(xiàng)目添加到該數(shù)組中。jAL28資訊網(wǎng)——每日最新資訊28at.com

Object.groupBy()

可以通過(guò)以下方式來(lái)使用新的Object.groupBy方法,代碼更簡(jiǎn)潔:jAL28資訊網(wǎng)——每日最新資訊28at.com

const fruitsByColor = Object.groupBy(fruits, (fruit) => fruit.color);

需要注意,使用Object.groupBy方法返回一個(gè)沒(méi)有原型(即沒(méi)有繼承任何屬性和方法)的對(duì)象。這意味著該對(duì)象不會(huì)繼承Object.prototype上的任何屬性或方法,例如hasOwnProperty或toString等。雖然這樣做可以避免意外覆蓋Object.prototype上的屬性,但也意味著不能使用一些與對(duì)象相關(guān)的方法。jAL28資訊網(wǎng)——每日最新資訊28at.com

const fruitsByColor = Object.groupBy(fruits, (fruit) => fruit.color);console.log(fruitsByColor.hasOwnProperty("red"));// TypeError: fruitsByColor.hasOwnProperty is not a function

在調(diào)用Object.groupBy時(shí),傳遞給它的回調(diào)函數(shù)應(yīng)該返回一個(gè)字符串或 Symbol 類型的值。如果回調(diào)函數(shù)返回其他類型的值,它將被強(qiáng)制轉(zhuǎn)換為字符串。jAL28資訊網(wǎng)——每日最新資訊28at.com

瀏覽器支持:jAL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jAL28資訊網(wǎng)——每日最新資訊28at.com

Map.groupBy()

Map.groupBy和Object.groupBy的功能一樣,只是返回的結(jié)果類型不同。Map.groupBy返回一個(gè) Map 對(duì)象,而Object.groupBy返回一個(gè)普通對(duì)象。jAL28資訊網(wǎng)——每日最新資訊28at.com

const fruits = [    { name: "Apple", color: "red" },    { name: "Banana", color: "yellow" },    { name: "Cherry", color: "red" },    { name: "Lemon", color: "yellow" },    { name: "Grape", color: "purple" },  ];const fruitsByColor = Map.groupBy(fruits, (fruit) => fruits.color);

這里根據(jù)水果顏色進(jìn)行了分組,輸出結(jié)果如下:jAL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jAL28資訊網(wǎng)——每日最新資訊28at.com

可以通過(guò) Map 的 get 方法來(lái)來(lái)獲取分組分組結(jié)果:jAL28資訊網(wǎng)——每日最新資訊28at.com

fruitsByColor.get("red");// [{"name": "Apple", "color": "red"}, {"name": "Cherry", "color": "red"}]

瀏覽器支持:jAL28資訊網(wǎng)——每日最新資訊28at.com

String:isWellFormed() / toWellFormed()

String.prototype.isWellFormed()

isWellFormed() 用于檢查一個(gè) UTF-16 編碼的字符串是否包含孤立的代理項(xiàng)(即未與另一個(gè)代理項(xiàng)配對(duì)的高代理或低代理)。UTF-16使用代理對(duì)來(lái)表示Unicode中超過(guò)基本多文種平面的字符。一個(gè)有效的UTF-16字符串應(yīng)該只包含正確配對(duì)的代理對(duì)或單獨(dú)的BMP字符。jAL28資訊網(wǎng)——每日最新資訊28at.com

下面來(lái)看一個(gè)例子jAL28資訊網(wǎng)——每日最新資訊28at.com

const strings = [  // 單獨(dú)的前導(dǎo)代理  "ab/uD800",  "ab/uD800c",  // 單獨(dú)的后尾代理  "/uDFFFab",  "c/uDFFFab",  // 格式正確  "abc",  "ab/uD83D/uDE04c",];for (const str of strings) {  console.log(str.isWellFormed());}// 輸出:// false// false// false// false// true// true

如果傳遞的字符串格式不正確, encodeURI 會(huì)拋出錯(cuò)誤。可以通過(guò)使用 isWellFormed() 在將字符串傳遞給 encodeURI() 之前測(cè)試字符串來(lái)避免這種情況。jAL28資訊網(wǎng)——每日最新資訊28at.com

const illFormed = "https://example.com/search?q=/uD800";try {  encodeURI(illFormed);} catch (e) {  console.log(e); // URIError: URI malformed}if (illFormed.isWellFormed()) {  console.log(encodeURI(illFormed));} else {  console.warn("Ill-formed strings encountered."); // Ill-formed strings encountered.}

isWellFormed() 函數(shù)的使用場(chǎng)景主要包括以下幾種情況:jAL28資訊網(wǎng)——每日最新資訊28at.com

  • 數(shù)據(jù)驗(yàn)證:當(dāng)你從外部源(如用戶輸入、文件、網(wǎng)絡(luò)請(qǐng)求等)接收字符串時(shí),你可能想要驗(yàn)證這些字符串是否包含有效的UTF-16編碼。如果字符串包含孤立的代理項(xiàng)(即沒(méi)有配對(duì)的高代理或低代理),那么它可能不是有效的UTF-16字符串,這可能會(huì)導(dǎo)致后續(xù)處理時(shí)出錯(cuò)。
  • 文本處理:在處理文本數(shù)據(jù)(如搜索、排序、轉(zhuǎn)換等)時(shí),確保文本是有效編碼的非常重要。如果文本包含錯(cuò)誤的編碼,那么處理結(jié)果可能會(huì)是不正確的或不可預(yù)測(cè)的。
  • 網(wǎng)絡(luò)傳輸:當(dāng)你通過(guò)網(wǎng)絡(luò)發(fā)送或接收文本數(shù)據(jù)時(shí),確保數(shù)據(jù)的編碼是正確的至關(guān)重要。錯(cuò)誤的編碼可能導(dǎo)致數(shù)據(jù)在傳輸過(guò)程中被損壞,或者在接收端無(wú)法正確解析。
  • 數(shù)據(jù)庫(kù)存儲(chǔ):在將文本數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)之前,驗(yàn)證其編碼的正確性也是一個(gè)好習(xí)慣。這可以確保數(shù)據(jù)的完整性和可讀性,并避免在后續(xù)查詢或處理時(shí)出現(xiàn)問(wèn)題。
  • 用戶界面顯示:在用戶界面中顯示文本時(shí),確保文本是有效編碼的也很重要。錯(cuò)誤的編碼可能導(dǎo)致文本無(wú)法正確顯示,或者顯示出不正確的字符。

瀏覽器支持:jAL28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片jAL28資訊網(wǎng)——每日最新資訊28at.com

String.prototype.toWellFormed()

toWellFormed() 方法返回一個(gè)字符串,其中該字符串的所有單獨(dú)代理項(xiàng)都被替換為 Unicode 替換字符 U+FFFD。jAL28資訊網(wǎng)——每日最新資訊28at.com

toWellFormed() 迭代字符串的碼元,并將任何單獨(dú)代理項(xiàng)替換為 Unicode 替換字符 U+FFFD。這確保了返回的字符串格式正確并可用于期望正確格式字符串的函數(shù),比如 encodeURI。由于引擎能夠直接訪問(wèn)字符串的內(nèi)部表示,與自定義實(shí)現(xiàn)相比 toWellFormed() 更高效。jAL28資訊網(wǎng)——每日最新資訊28at.com

const strings = [  // 單獨(dú)的前導(dǎo)代理  "ab/uD800",  "ab/uD800c",  // 單獨(dú)的后尾代理  "/uDFFFab",  "c/uDFFFab",  // 格式正確  "abc",  "ab/uD83D/uDE04c",];for (const str of strings) {  console.log(str.toWellFormed());}// 輸出:// "ab?"http:// "ab?c"http:// "?ab"http:// "c?ab"http:// "abc"http:// "ab 
                

本文鏈接:http://www.www897cc.com/showinfo-26-97282-0.htmlECMAScript 2024 正式發(fā)布,新特性一覽!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 如何獲取請(qǐng)求的進(jìn)度,并展示給用戶看?

下一篇: 工程化視角的 Kotlin Multiplatform 核心解讀及優(yōu)化

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 静宁县| 永州市| 青铜峡市| 平安县| 洛浦县| 满洲里市| 崇义县| 碌曲县| 霸州市| 抚远县| 连江县| 南岸区| 略阳县| 榕江县| 钟山县| 平乐县| 乐平市| 阜新市| 扎囊县| 安丘市| 宿州市| 绥江县| 田林县| 绥芬河市| 健康| 越西县| 津南区| 九龙坡区| 曲阳县| 万州区| 万山特区| 屏东县| 阳江市| 马公市| 屯门区| 滦南县| 隆德县| 华宁县| 南昌县| 峨山| 丰都县|