ES10(2019)有哪些更新和新特性?

2022-06-30 16:30:13 字數 3634 閱讀 8763

以前,這些符號在字串文字中被視為行終止符,因此使用它們會導致syntaxerror異常。

如果輸入 unicode 格式但是超出範圍的字元,在原先json.stringify返回格式錯誤的unicode字串。現在實現了乙個改變json.stringify的第3階段提案,因此它為其輸出轉義序列,使其成為有效unicode(並以utf-8表示)

flat()flatmap()本質上就是是歸納(reduce) 與 合併(concat)的操作。

array.prototype.flat()

flat()方法會按照乙個可指定的深度遞迴遍歷陣列,並將所有元素與遍歷到的子陣列中的元素合併為乙個新陣列返回。

var arr1 = [1, 2, [3, 4]];

arr1.flat();

// [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];

arr2.flat();

// [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];

arr3.flat(2);

// [1, 2, 3, 4, 5, 6]

//使用 infinity 作為深度,展開任意深度的巢狀陣列

arr3.flat(infinity);

// [1, 2, 3, 4, 5, 6]

array.prototype.flatmap()

flatmap()方法首先使用對映函式對映每個元素,然後將結果壓縮成乙個新陣列。它與 map 和 深度值1的 flat 幾乎相同,但 flatmap 通常在合併成一種方法的效率稍微高一些。 這裡我們拿map方法與flatmap方法做乙個比較。

var arr1 = [1, 2, 3, 4];

arr1.map(x => [x * 2]);

// [[2], [4], [6], [8]]

arr1.flatmap(x => [x * 2]);

// [2, 4, 6, 8]

// 只會將 flatmap 中的函式返回的陣列 「壓平」 一層

arr1.flatmap(x => [[x * 2]]);

// [[2], [4], [6], [8]]

新增的這兩個方法很好理解,分別去除字串首尾空白字元,這裡就不用例子說宣告了。

object.entries()方法的作用是返回乙個給定物件自身可列舉屬性的鍵值對陣列,其排列與使用 for...in 迴圈遍歷該物件時返回的順序一致(區別在於 for-in 迴圈也列舉原型鏈中的屬性)。

object.fromentries()則是object.entries()的反轉。

object.fromentries()函式傳入乙個鍵值對的列表,並返回乙個帶有這些鍵值對的新物件。這個迭代引數應該是乙個能夠實現@iterator方法的的物件,返回乙個迭代器物件。它生成乙個具有兩個元素的類似陣列的物件,第乙個元素是將用作屬性鍵的值,第二個元素是與該屬性鍵關聯的值。

const sym = symbol('the description');

以前,訪問描述的唯一方法是將符號轉換為字串:

assert.equal(string(sym), 'symbol(the description)');

現在引入了getter symbol.prototype.description以直接訪問描述:

assert.equal(sym.description, 'the description');

matchall()方法返回乙個包含所有匹配正規表示式及分組捕獲結果的迭代器。 在 matchall 出現之前,通過在迴圈中呼叫regexp.exec來獲取所有匹配項資訊(regexp需使用/g標誌:

const regexp = regexp('foo*','g');

const str = 'table football, foosball';

while ((matches = regexp.exec(str)) !== null) . next starts at $.`);

// expected output: "found foo. next starts at 9."

// expected output: "found foo. next starts at 19."

}

如果使用matchall ,就可以不必使用while迴圈加exec方式(且正規表示式需使用/g標誌)。使用matchall 會得到乙個迭代器的返回值,配合 for...of, array spread, or array.from() 可以更方便實現功能:

const regexp = regexp('foo*','g'); 

const str = 'table football, foosball';

let matches = str.matchall(regexp);

for (const match of matches)

// array [ "foo" ]

// array [ "foo" ]

// matches iterator is exhausted after the for..of iteration

// call matchall again to create a new iterator

matches = str.matchall(regexp);

array.from(matches, m => m[0]);

// array [ "foo", "foo" ]

function /* comment */ foo /* another comment */() {}

// 之前不會列印注釋部分

console.log(foo.tostring()); // function foo(){}

// es2019 會把注釋一同列印

console.log(foo.tostring()); // function /* comment */ foo /* another comment */ (){}

// 箭頭函式

const bar /* comment */ = /* another comment */ () => {};

console.log(bar.tostring()); // () => {}

在 es10 之前,我們必須通過語法為 catch 子句繫結異常變數,無論是否有必要。很多時候 catch 塊是多餘的。 es10 提案使我們能夠簡單的把變數省略掉。

不算大的改動。

之前是

try {} catch(e) {}

現在是

try {} catch {}

現在的基本資料型別(值型別)不止5種(es6之後是六種)了哦!加上bigint一共有七種基本資料型別,分別是: string、number、boolean、null、undefined、symbol、bigint

es6 定義靜態類 ES6中類的靜態方法有哪些作用

以前看過的es6的東西,又忘了,再總結下 類相當於例項的原型,所有在類中定義的方法,都會被例項繼承。如果在乙個方法前,加上static關鍵字,就表示該方法不會被例項繼承,而是直接通過類來呼叫,這就稱為 靜態方法 class foo static classmethod return hello fo...

dml有哪些mysql DDL與DML有哪些區別?

問 ddl與dml的區別有哪些?答 從嚴格意義上講,dml和ddl確實存在於sql之外,但我猜想你想問的是關於sql的元件。sql指的是結構化查詢語言。實際上,這真是名不副實。sql可以做到的遠不只是查詢資料。的確,語言明確地被分成了兩部分,分別是資料定義語言部分 ddl 和資料操作語言 dml 部...

有哪4種啟動模式 有哪些特點

今天遇到這個問題了,就去查了資料總結了一下希望對大家也能有所幫助!1.standard 預設模式 來了intent,每次都建立新的例項。2.singletop 來了intent,每次都建立新的例項,僅乙個例外 當棧頂的activity 恰恰就是該activity的例項 即需要建立的例項 時,不再建立...