ES7 ES9新特性概述

2021-09-11 14:47:06 字數 3308 閱讀 7562

array.prototype.includes

類似於indexof,該方法用來判斷乙個陣列是否包含乙個指定的值,如果是返回 true,否則false。

簽名為:array.prototype.includes(value : any) : boolean。

includes與indexof主要區別在於:

[nan].includes(nan)    //true     [nan].indexof(nan)     //-1複製**

** 指數運算子

用於冪運算,與math.pow(x, y)相同。

3 ** 2        //9複製**

async/await 非同步函式

在多個非同步函式執行時比promise更簡潔

寫法如下:

async function

asyncfunc

() 複製**

sharearraybuffer和atomics

用於從共享記憶體位置讀取和寫入。

object.values()

返回物件自身可列舉值陣列

object.entries()

返回乙個給定物件自身可列舉屬性的鍵值對陣列。map,set物件也可以使用

新字串方法padstart()和padend()

用於填充字串達到當前長度。

『a'.padstart(5,'xy')xyxya『a'.padend(5,'xy')axyxy複製**

object.getownpropertydescriptors()

返回物件中所有屬性的屬性描符

函式引數列表和呼叫中可以用逗號結尾

如: 

func('a','b',);複製**

在需要迴圈迭代呼叫非同步函式async時,是無法通過同步迭代傳遞其非同步資料的。

es2018引入非同步迭代器(asynchronous iterators)for-awiait-of,是非同步的for…of版本

,next()方法返回乙個promise。寫法如下:

function

createrejectingiterable

() , next

() , };}(async function

() } catch (e) })();複製**

es2015引入了rest引數和拓展運算子(…)。目前僅適用於陣列結構和引數定義。使用rest運算子可以收集所有剩餘引數,拓展運算子(…)可以將所有可列舉值的自身屬性賦值到運算元中。

es2018為物件解構提供了和陣列一樣的rest引數和拓展運算子(…)

const obj = ;const  = obj;複製**
正規表示式命名捕獲組允許通過顯示命名訪問到指定的組。在此之前,正則捕獲組都是按編號訪問。

es2018引入了命名捕獲組(?expression),用法如下:

const regdate = /(?\d)-(?\d)-(?\d\d/;const matchobj  = regdate.exec('2018-08-28』);console.log(matchobj.groups.year)    // 2018console.log(matchobj.groups.month)   // 08console.log(matchobj.groups.day )    // 28

複製**

斷言,通常指的是在目標字串的當前匹配位置進行的一種測試但這種測試並不占用目標字串,也即不會移動模式在目標字串中的當前匹配位置。

常見斷言元字元有: \b, \b, \a, \z, \z, ^ ,$ 它們只是表示特殊位置。

先行斷言,格式(?=pattern)/(?!pattern),表示從當前匹配位置開始之後內容必須與斷言相匹配。若匹配成功,正規表示式正向斷言成功,返回匹配字串。但是斷言並沒有包含在匹配字串中。若匹配失敗,返回null。

用法如下:

const re_as_bs = /[a-z]+(?=\d+)/,

const match = re_as_bs.exec(『ab100』);

console.log( match[0] ); // abconst match2 = re_as_bs.exec(『ab』);

console.log( match2[0] ); // null複製**

反向斷言的工作方式與先行斷言相似,但方向相反。格式為(?<=pattern)用法如下:

const re_dollar_prefix  = /(?<=\$)foo/g,

const match = 『$foo, %foo, foo』.relpace(re_dollar_prefix,』ele』);

console.log( match[0]); // 『$ele, %foo, foo'

複製**

否定反向斷言同理,格式為(?目前,正規表示式點.與行終止符不匹配(\n),es2018指定了正規表示式/s (singleline的縮寫)標誌改變這種行為。

用法如下:

/^.$/.test(『\n'); // false/^.$/s.test(『\n');// true

複製**

es2018允許通過\p來匹配字元。正規表示式要使用 /u (unicode)標誌 。用法如下:

/^\p+$/u.test('\t \n\r』) //true/^\p+$/u.test('grüße』) //true

複製**

es2015、es2016 規範不允許使用轉義字元,如 "\u" (unicode), "\x" (十六進製制),」\數字」 (八進位制)

但是es2018解除了這一限制:

function mytagfunc(str) }const strtag = mytagfunc `hi \uemm123`; // call mytagfuncconsole.log(strtag.cooked, strtag.raw) //[undefined, raw[「hi \uemm123"]]

複製**

ES6系列十 ES7新特性

陣列 arr.includes 陣列是否包含某個東西 陣列的 arr.keys arr,entries for in 遍歷陣列 下標 key for of 遍歷陣列 值 value,不能用於json let arr a b c console.log arr.includes 1 for let i...

es6新特性 ES6新特性(一)

var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...

關於 ES7 ES8的一些新特性

array.prototype.includes 開發人員用來檢查陣列中是否存在值,indexof是一種尷尬的使用,因為它返回乙個元素在陣列中的位置或者 1當這樣的元素不能被找到的情況下。所以它返回乙個數字,而不是乙個布林值,includes存在為true,不存在為false 例子 陣列 1,2,3...