久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

5個ES10的新特性

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

5個ES10的新特性

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&param2=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   ";  // es2019 console.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 9 arr.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);    // => foo  sym = Symbol(); console.log(sym.description);    // => undefined  // create a global symbol sym = 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 。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
蜜桃视频在线网站| 婷婷国产精品| 国产模特精品视频久久久久| 久久九九99| 精品1区2区3区4区| 亚洲香蕉久久| 蜜桃久久精品一区二区| 日本欧美在线| 精品国产一区二| 伊人久久亚洲影院| 伊人影院久久| 婷婷视频一区二区三区| 无码日韩精品一区二区免费| 丰满少妇一区| 久久高清国产| 欧美日韩午夜电影网| 日本不卡免费高清视频在线| 美女亚洲一区| 国产精品天天看天天狠| 国产黄大片在线观看| 美女精品在线| 精品三级av在线导航| 好吊一区二区三区| 日韩在线网址| av中文资源在线资源免费观看| 亚洲精品1区| 日韩中文欧美在线| 欧美亚洲自偷自偷| 欧美色图一区| 国产精品v日韩精品v欧美精品网站 | 激情六月综合| 欧美在线91| 99视频精品视频高清免费| 日韩黄色av| 欧洲精品一区二区三区| 日韩视频1区| 久久男人天堂| 国产毛片一区| 日本免费一区二区三区四区| 性欧美精品高清| 一区二区精品伦理...| 婷婷精品在线| 好看的av在线不卡观看| 成人在线视频区| 欧美日韩一区自拍| 久久久水蜜桃av免费网站| 欧美另类中文字幕 | 色婷婷精品视频| 欧美午夜三级| 久久最新视频| 91精品一区二区三区综合| 免费在线成人| 日韩精品亚洲专区| 日韩深夜视频| 美女国产精品久久久| 免费成人性网站| 精品亚洲成人| 久久狠狠亚洲综合| 美女被久久久| 午夜国产精品视频| 欧美不卡高清一区二区三区| 国产精品久久免费视频| 鲁大师成人一区二区三区| 日本欧美不卡| 成人国产精品一区二区网站| 在线精品视频一区| 亚洲爱爱视频| 国产精品精品| 日本va欧美va精品发布| 久久国产高清| 久久国产中文字幕| 欧美精品成人| 亚洲色图网站| 在线精品亚洲| 亚洲一区二区小说| 亚洲天堂久久| 精品国产精品久久一区免费式| 午夜亚洲一区| 高清一区二区三区| 久久精品国产亚洲aⅴ | 国产精品伦理久久久久久| 国产日韩欧美中文在线| 三级在线观看一区二区| 99热精品久久| 久久久777| 欧美aa在线观看| 欧美aⅴ一区二区三区视频| 国产精品主播| 国产精品夜夜夜| 国产精品色在线网站| 欧美日韩亚洲一区在线观看| 在线综合亚洲| 亚洲电影在线一区二区三区| a日韩av网址| 另类综合日韩欧美亚洲| 国产麻豆一区二区三区精品视频| 日韩精品久久久久久| 五月国产精品| 日韩一区网站| 日本成人精品| 日韩激情综合| 伊人久久亚洲| 日韩精品社区| 欧美在线精品一区| 欧美日韩1区| 视频一区欧美精品| 亚洲一级淫片| 亚洲欧美日本国产| 国产一卡不卡| 精品视频国产| 国产一区二区久久久久| 精品中文字幕一区二区三区| 成人污污视频| 另类欧美日韩国产在线| 国产一区二区三区不卡视频网站 | 中文字幕人成乱码在线观看| 日韩av首页| 日韩一区电影| 夜夜嗨一区二区| 国产尤物精品| 免费观看在线综合| 国产乱子精品一区二区在线观看 | 香蕉人人精品| 日韩中文字幕亚洲一区二区va在线 | 中文字幕一区二区三区日韩精品 | 日本麻豆一区二区三区视频| 香蕉久久久久久| 久久爱www.| 国产成人免费精品| 99久久婷婷| 悠悠资源网久久精品| 亚洲精品动态| 久久精品国产精品亚洲毛片| av一区在线| 午夜久久久久| 日本免费新一区视频| 国产亚洲字幕| 日韩电影免费在线观看| 精品亚洲美女网站| 蜜臀a∨国产成人精品| 日韩欧美久久| 日韩av自拍| 欧美专区18| 亚洲经典在线| 欧美在线看片| 999国产精品| 喷白浆一区二区| 色8久久久久| 天堂√中文最新版在线| 午夜亚洲福利在线老司机| 国产精品magnet| 亚洲午夜精品久久久久久app| 日韩极品在线观看| 老司机免费视频一区二区三区| 极品日韩av| 中文字幕一区二区三区日韩精品 | 一区二区三区国产盗摄| 精品网站999| 亚洲深夜影院| 欧美精品1区| 欧美 日韩 国产精品免费观看| 日韩欧美中文字幕一区二区三区| 国产不卡精品在线| 三级欧美韩日大片在线看| 国产精品15p| 亚洲成人二区| 国产情侣一区在线| 日韩视频二区| 欧美日韩午夜电影网| av资源亚洲| 国产色噜噜噜91在线精品| 九九在线精品| 精品一区电影| 午夜久久av| 1000部精品久久久久久久久| 久久国产精品美女| 免费观看在线色综合| 中文字幕在线看片| 久久国产人妖系列| 国产视频久久| 日韩一区电影| 国产精品男女| 免费看黄色91| 精品欧美久久| 国产精品亲子伦av一区二区三区 | 欧美特黄a级高清免费大片a级| 国产成人免费| 男人的天堂久久精品| 久久久久欧美精品| 精品资源在线| 国产欧美欧美| 免费人成在线不卡| 国产99久久久国产精品成人免费| 国产乱人伦丫前精品视频| 蜜臀精品一区二区三区在线观看| 日韩一区欧美| 日韩精品亚洲aⅴ在线影院| 午夜久久tv| 久久国产日韩| 国产精品1区|