亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

淺談目前可以使用ES10的5個新特性

2024-05-06 16:52:43
字體:
來源:轉載
供稿:網友

ECMAScript 2015,也稱為ES6,是一個花了6年時間完成的主要版本。從那時起,負責ECMAScript標準開發的技術委員會39 (TC39)每年都會發布該標準的新版本。這個年度發布周期簡化了這個過程,并使新特性快速可用,JavaScript社區對此表示歡迎。

今年,ECMAScript 2019(簡稱ES2019)將會發布。 新功能包括Object.fromEntries(),trimStart(),trimEnd(),flat(),flatMap(),symbol對象的description屬性,可選的catch綁定等。

好消息是這些功能已經在最新版本的Firefox和Chrome中實現,并且它們也可以被轉換,以便舊版瀏覽器能夠處理它們。

1. Object.fromEntries()

在JavaScript中,將數據從一種格式轉換為另一種格式非常常見。 為了便于將對象轉換為數組,ES2017引入了Object.entrie()方法。 此方法將對象作為參數,并以[key,value]的形式返回對象自己的可枚舉字符串鍵控屬性對的數組。 例如:

const obj = {one: 1, two: 2, three: 3};console.log(Object.entries(obj));  // => [["one", 1], ["two", 2], ["three", 3]]

但是如果我們想要做相反的事情并將鍵值對列表轉換為對象呢? 某些編程語言(如Python)為此提供了dict()函數。 在Underscore.js和Lodash中還有_.fromPairs函數。

ES2019引入Object.fromEntries()方法為JavaScript帶來類似的功能, 此靜態方法允許你輕松地將鍵值對列表轉換為對象:

const myArray = [['one', 1], ['two', 2], ['three', 3]];const obj = Object.fromEntries(myArray);console.log(obj);  // => {one: 1, two: 2, three: 3}

如你所見,Object.fromEntries()與Object.entries()所做的事情正好相反。 雖然以前可以實現Object.fromEntries()相同的功能,但它實現方式有些復雜:

const myArray = [['one', 1], ['two', 2], ['three', 3]];const Array.from(myArray).reduce((acc, [key, val]) => Object.assign(acc, {[key]: val}), {})console.log(obj);  // => {one: 1, two: 2, three: 3}

請記住,傳遞給Object.fromEntries()的參數可以是實現可迭代協議的任何對象,只要它返回一個兩元素,類似于數組的對象即可。

例如,在以下代碼中,Object.fromEntries() 將Map對象作為參數,并創建一個新對象,其鍵和對應值由Map中的對給出:

const map = new Map();map.set('one', 1);map.set('two', 2);const obj = Object.fromEntries(map);console.log(obj);  // => {one: 1, two: 2}

Object.fromEntries() 方法對于轉換對象也非常有用,思考以下代碼:

const obj = {a: 4, b: 9, c: 16};// 將對象轉換為數組const arr = Object.entries(obj);// 計算數字的平方根const map = arr.map(([key, val]) => [key, Math.sqrt(val)]);// 將數組轉換回對象const obj2 = Object.fromEntries(map);console.log(obj2); // => {a: 2, b: 3, c: 4}

上述代碼將對象中的值轉換為其平方根。 為此,它首先將對象轉換為數組,然后使用map()方法獲取數組中值的平方根,結果是可以轉換回對象的數組。

使用Object.fromEntries()的另一種情況是處理URL的查詢字符串,如本例所示

const paramsString = 'param1=foo¶m2=baz';const searchParams = new URLSearchParams(paramsString);Object.fromEntries(searchParams);  // => {param1: "foo", param2: "baz"}

此代碼中,查詢字符串將傳遞給 URLSearchParams()構造函數。 然后將返回值(即URLSearchParams對象實例)傳遞給Object.fromEntries() 方法,結果是一個包含每個參數作為屬性的對象。

Object.fromEntries() 方法目前是第4階段提案,這意味著它已準備好包含在ES2019標準中。

2. trimStart() and trimEnd()

trimStart()和trimEnd()方法在實現與trimLeft()和trimRight()相同。這些方法目前處于第4階段,將被添加到規范中,以便與padStart()和padEnd()保持一致,來看一些例子:

const str = "  string  ";// es2019console.log(str.trimStart());  // => "string  "console.log(str.trimEnd());   // => "  string"// 相同結果console.log(str.trimLeft());   // => "string  "console.log(str.trimRight());  // => "  string"

對于Web兼容性,trimLeft() 和trimRight() 將保留為trimStart() 和trimEnd() 的別名。

3. flat() and flatMap()

flat() 方法可以將多維數組展平成一維數組

const arr = ['a', 'b', ['c', 'd']];const flattened = arr.flat();console.log(flattened);  // => ["a", "b", "c", "d"]

以前,我們經常使用reduce()或concat()來展平多維數組:

const arr = ['a', 'b', ['c', 'd']];const flattend = [].concat.apply([], arr);// or// const flattened = [].concat(...arr);console.log(flattened);  // => ["a", "b", "c", "d"]

請注意,如果提供的數組中有空值,它們會被丟棄:

const arr = ['a', , , 'b', ['c', 'd']];const flattened = arr.flat();console.log(flattened);  // => ["a", "b", "c", "d"]

flat() 還接受一個可選參數,該參數指定嵌套數組應該被展平的級別數。 如果未提供參數,則將使用默認值1:

const arr = [10, [20, [30]]];console.log(arr.flat());   // => [10, 20, [30]]console.log(arr.flat(1));  // => [10, 20, [30]]console.log(arr.flat(2));  // => [10, 20, 30]

flatMap() 方法將map()和flat()組合成一個方法。 它首先使用提供的函數的返回值創建一個新數組,然后連接該數組的所有子數組元素。 來個例子:

const arr = [4.25, 19.99, 25.5];console.log(arr.map(value => [Math.round(value)]));  // => [[4], [20], [26]]console.log(arr.flatMap(value => [Math.round(value)]));  // => [4, 20, 26]

數組將被展平的深度級別為1.如果要從結果中刪除項目,只需返回一個空數組:

const arr = [[7.1], [8.1], [9.1], [10.1], [11.1]];// do not include items bigger than 9arr.flatMap(value => { if (value >= 10) {  return []; } else {  return Math.round(value); }}); // returns:// => [7, 8, 9]

除了正在處理的當前元素外,回調函數還將接收元素的索引和對數組本身的引用。flat()和flatMap()方法目前處于第4階段。

4.Symbol 對象的 description 屬性

在創建Symbol時,可以為調試目的向其添加description (描述)。有時候,能夠直接訪問代碼中的description 是很有用的。

ES2019 中為Symbol對象添加了只讀屬性 description ,該對象返回包含Symbol描述的字符串。

let sym = Symbol('foo');console.log(sym.description);  // => foosym = Symbol();console.log(sym.description);  // => undefined// create a global symbolsym = Symbol.for('bar');console.log(sym.description);  // => bar

5.可選的 catch

try catch 語句中的catch有時候并沒有用,思考下面代碼:

try { // 使用瀏覽器可能尚未實現的功能} catch (unused) { // 這里回調函數中已經幫我們處理好的錯誤}

此代碼中的catch回調的信息并沒有用處。 但這樣寫是為了避免SyntaxError錯誤。 ES2019可以省略catch周圍的括號:

try { // ...} catch { // ....}

另外:ES2020 的 String.prototype.matchAll

matchAll() 方法是ES2020 第4階段提議,它針對正則表達式返回所有匹配(包括捕獲組)的迭代器對象。

為了與match()方法保持一致,TC39 選擇了“matchAll”而不是其他建議的名稱,例如 “matches” 或 Ruby的 “scan”??磦€簡單的例子:

const re = /(Dr/. )/w+/g;const str = 'Dr. Smith and Dr. Anderson';const matches = str.matchAll(re);for (const match of matches) { console.log(match);}// logs:// => ["Dr. Smith", "Dr. ", index: 0, input: "Dr. Smith and Dr. Anderson", groups: undefined]// => ["Dr. Anderson", "Dr. ", index: 14, input: "Dr. Smith and Dr. Anderson", groups: undefined]

此正則表達式中的捕獲組匹配字符“Dr”,后跟一個點和一個空格。/w+ 匹配任何單詞字符一次或多次。 并且g標志指示引擎在整個字符串中搜索模式。

之前,必須在循環中使用exec()方法來實現相同的結果,這不是非常有效:

const re = /(Dr/.) /w+/g;const str = 'Dr. Smith and Dr. Anderson';let matches;while ((matches = re.exec(str)) !== null) { console.log(matches);}// logs:// => ["Dr. Smith", "Dr.", index: 0, input: "Dr. Smith and Dr. Anderson", groups: undefined]// => ["Dr. Anderson", "Dr.", index: 14, input: "Dr. Smith and Dr. Anderson", groups: undefined]

重要的是要注意盡管match() 方法可以與全局標志g一起使用來訪問所有匹配,但它不提供匹配的捕獲組或索引位置。 比較以下代碼:

const re = /page (/d+)/g;const str = 'page 2 and page 10';console.log(str.match(re));  // => ["page 2", "page 10"]console.log(...str.matchAll(re)); // => ["page 2", "2", index: 0, input: "page 2 and page 10", groups: undefined] // => ["page 10", "10", index: 11, input: "page 2 and page 10", groups: undefined]

總結

在這篇文章中,我們仔細研究了 ES2019 中引入的幾個關鍵特性,包括Object.fromEntries(),trimStart(), trimEnd(), flat(), flatMap(),symbol 對象的description 屬性以及可選的catch 。

盡管一些瀏覽器還沒有完全實現這些特性,但可以使用Babel和其他JavaScript轉換器,仍然可以在項目中使用它們。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
青草热久免费精品视频| 久久久久中文字幕| 欧美xxxx综合视频| 日韩精品有码在线观看| 国产精品免费看久久久香蕉| 精品国产乱码久久久久久天美| 久久国产色av| 在线成人激情黄色| 国产精品久久精品| 亚洲精品wwww| 欧美国产日韩一区二区在线观看| 国产成人拍精品视频午夜网站| 久久99精品国产99久久6尤物| 中文字幕在线观看亚洲| 国a精品视频大全| 韩国精品久久久999| 国产成人精品国内自产拍免费看| 久久久久亚洲精品成人网小说| 精品亚洲精品福利线在观看| 亚洲一区二区三区xxx视频| 成人激情春色网| 精品丝袜一区二区三区| 最近2019好看的中文字幕免费| 欧美国产日本高清在线| 久久久久久久久久国产| 亚洲黄页网在线观看| 按摩亚洲人久久| 精品在线小视频| 性视频1819p久久| 在线成人免费网站| 国产精品盗摄久久久| 中文欧美在线视频| 2019亚洲日韩新视频| 久久精品国产96久久久香蕉| 成人午夜小视频| 亚洲一级黄色片| 国产亚洲a∨片在线观看| 在线午夜精品自拍| 国产精品第七影院| 欧美电影在线免费观看网站| 亚洲免费影视第一页| 美日韩精品免费视频| 日韩精品极品在线观看| 久久久久久网站| 91精品久久久久久久久久久久久久| 中文字幕日韩免费视频| 欧美裸体xxxxx| 亚洲天堂av在线免费| 国产伦精品一区二区三区精品视频| 2020欧美日韩在线视频| 国产精品亚洲视频在线观看| 亚洲激情国产精品| 免费不卡欧美自拍视频| 亚洲a在线播放| 亚洲日本中文字幕免费在线不卡| 日韩人在线观看| 成人在线视频福利| 韩国一区二区电影| 欧美xxxx18性欧美| 色香阁99久久精品久久久| 欧美大全免费观看电视剧大泉洋| 精品日韩中文字幕| 欧美在线视频在线播放完整版免费观看| 中文字幕亚洲图片| 日韩av第一页| 国产日韩av在线播放| 久久久久久国产三级电影| 国产成人97精品免费看片| 97视频在线观看网址| 欧美日韩国产激情| 91精品久久久久久久久久久| 久久久久久国产免费| 91av在线免费观看| 国产成人福利夜色影视| 色99之美女主播在线视频| 青青久久av北条麻妃黑人| 亚洲毛片在线观看| 午夜精品99久久免费| 精品日本高清在线播放| 亚洲欧美日韩综合| 国产精品精品久久久久久| 992tv成人免费影院| 亚洲成人久久一区| 亚洲国产精品一区二区久| 成人免费网站在线| 成人黄色短视频在线观看| 国产亚洲日本欧美韩国| 日韩免费在线播放| 欧美性猛交xxxx乱大交3| 日本高清视频一区| 最新中文字幕亚洲| 国产成人精品在线观看| 欧美精品日韩三级| 国产这里只有精品| 成人h猎奇视频网站| 欧美日韩加勒比精品一区| 中国china体内裑精亚洲片| 久久精品99无色码中文字幕| 啊v视频在线一区二区三区| 亚洲欧美日韩久久久久久| 亚洲天堂第一页| 亚洲最大成人免费视频| 亚洲欧洲美洲在线综合| 91美女片黄在线观看游戏| 九色精品免费永久在线| 国产精品99久久久久久www| 久久精品久久精品亚洲人| 欧美激情喷水视频| 97精品国产aⅴ7777| 国内久久久精品| 日韩精品电影网| 97免费中文视频在线观看| 日韩成人中文字幕在线观看| 日韩av电影在线免费播放| 欧美性视频在线| 中文字幕一区二区精品| 久久久久在线观看| 国产91精品视频在线观看| 亚洲亚裔videos黑人hd| 亚洲精品mp4| 亚洲欧美国产日韩中文字幕| 亚洲人成在线观看| 日韩精品免费一线在线观看| 久久久精品电影| 91高潮精品免费porn| 伦伦影院午夜日韩欧美限制| 日韩精品丝袜在线| 欧美激情视频在线观看| 国产精品黄页免费高清在线观看| 久久久久久久久久久人体| 日韩一区二区三区国产| 国产精品一区二区三区免费视频| 久久精品成人欧美大片古装| 国模吧一区二区三区| 亚洲石原莉奈一区二区在线观看| 国产91色在线播放| 日产精品久久久一区二区福利| 国产中文字幕日韩| 日韩经典中文字幕| 欧美福利视频在线| 成人免费网视频| 久久人人爽人人| 国产精品99久久久久久人| 成人黄色短视频在线观看| 欧美精品一区二区三区国产精品| 欧美华人在线视频| 亚洲的天堂在线中文字幕| 91在线高清免费观看| 97精品视频在线播放| 久久中文字幕视频| 在线免费观看羞羞视频一区二区| 91精品啪aⅴ在线观看国产| 日韩风俗一区 二区| 亚洲深夜福利在线| 亚洲第一男人av| 久久99国产精品久久久久久久久| 国产亚洲精品综合一区91| 91久久久久久久| 精品亚洲男同gayvideo网站| 九九热精品视频| 久久久综合av| 成人有码视频在线播放| 日韩电影在线观看中文字幕| 国产欧美久久一区二区|