成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

ECMAScript 2016,2017和2018中新增功能的示例

_Dreams / 1648人閱讀

摘要:,和中新增功能的示例原文鏈接翻譯鏈接始終緊跟的最新功能是很難的,更難的是找到有用的代碼示例。和其他雙字節(jié)字符上的和和其它雙字節(jié)字符串使用的多字節(jié)表示。所以和可能無(wú)法按照預(yù)期的工作。提醒展開(kāi)運(yùn)算符用于等號(hào)的右側(cè),解構(gòu)運(yùn)算符用于等號(hào)的左側(cè)。

ECMAScript 2016,2017和2018中新增功能的示例

原文鏈接: medium.freecodecamp.org
翻譯鏈接:https://www.zcfy.cc/article/h...

始終緊跟Javascript(ECMAScript)的最新功能是很難的,更難的是找到有用的代碼示例。

因此,在本文中,我將介紹在TC39的最終提案中包含的18個(gè)功能,這些功能將被添加到ES2016, ES2017, and ES2018 (最終草案)中,并通過(guò)有實(shí)際用處的示例來(lái)展示它們。

這是一篇非常長(zhǎng)的貼子,但應(yīng)該非常容易閱讀。把它當(dāng)作“Netflix狂歡閱讀” 讀完之后,我保證你將掌握大量有關(guān)這些功能的知識(shí)。

讓我們一個(gè)一個(gè)地看看這些新功能

1. Array.prototype.includes

includes是Array實(shí)例上一個(gè)非常簡(jiǎn)的方法,可以非常容易查找到某一項(xiàng)是否在Array中(包括 NaN 而不像 indexOf不能查找NaN)。

const arr = [1, 2, 3, 4, NaN];
// Instead of
if (arr.indexOf(3) >= 0) {
    console.log(true);
}

// Use
if (arr.includes(3)) {
    console.log(true);
}

arr.includes(NaN); // true
arr.indexOf(NaN); // -1
花絮:JavaScript規(guī)范制定者想將它命名為contains,但是這個(gè)名字已經(jīng)明確地被Mootools用了,所他們使用includes。
2. 指數(shù) 運(yùn)算符

數(shù)學(xué)運(yùn)算如加法和減法分別有+和- 等中綴運(yùn)算符。與他們類(lèi)似,中綴運(yùn)算符通常用于指數(shù)運(yùn)算。在ECMAScript 2016中,引入了來(lái)代替Math.pow。

Math.pow(7,2) // 49

//Now
7**2 // 49

1、Object.values()
Object.values()是一個(gè)類(lèi)似于Object.keys()的新函數(shù),它返回對(duì)象自有屬性的所有值,而不包括原型鏈上的任何值。

const cars = { BMW: 2, TESLA: 2, TOYOTA: 1 };

// ES2015
const vals = Object.keys(cars).map(key => cars[key]);
console.log(vals); // [3,2,1]

// ES2017
const values = Object.values(cars);
console.log(values);

2、 Object.entries()
Object.entries()與Object.keys有關(guān),但不僅僅返回鍵,而是以數(shù)組的形式返回鍵和值。這使得在循環(huán)中使用對(duì)象,或?qū)?duì)象轉(zhuǎn)到Maps等變得非常簡(jiǎn)單。

示例 1:

const cars = { BMW: 2, TESLA: 2, TOYOTA: 1 };

// ES5.1
Object.keys(cars).forEach(function(key) {
    console.log("key: " + key + "value" + carsp[key]);
});

// ES8
for (let [key, value] of Object.entries(cars)) {
    console.log(`key: ${key} value:${value}`);
}

示例 2:

const cars = { BMW: 2, TESLA: 2, TOYOTA: 1 };

// ES2015
const map1 = new Map();
Object.keys(cars).forEach(key => {
    map1.set(key, cars[key]);
});

console.log(map1); // Map(3){"BMW" => 2, "TESLA" => 2, "TOYOTA" => 1}

// ES8
const map = new Map(Object.entries(cars));
console.log(map); // Map(3){"BMW" => 2, "TESLA" => 2, "TOYOTA" => 1}
3. 字符串填充

String新增了兩個(gè)實(shí)例謝謝老婆---String.prototype.padStart 和 String.prototype.padEnd?,它們?cè)试S在原始字符串的開(kāi)始和結(jié)尾處添加空字符串或者是其它的字符串。

"someString".padStart(字符串的總長(zhǎng)度 [,填充字符串]);

"5".padStart(10) // "
5"

"5".padStart(10, "=*") //"=*=*=*=*=5"
"5".padEnd(10) // "5         "

"5".padEnd(10, "=*") //"5=*=*=*=*="

當(dāng)我們想要漂亮的打印顯示或終端打印等場(chǎng)景中對(duì)齊輸出時(shí),將變得的很方便。

3.1 padStart 示例:
在下面的示例中,有一些不同長(zhǎng)度的數(shù)字,我們想在它們前面填充“0”,以便所有的項(xiàng)目都將以10位的相同長(zhǎng)度用于顯示。我們可以使用padStart(10, "0")很容易的實(shí)現(xiàn)。

// ECMAScript 2017
const formatted = [0, 1, 12, 123, 1234, 12345].map(num =>
    num.toString().padStart(10, "0")
);
console.log(formatted);// ["0000000000", "0000000001", "0000000012", "0000000123", "0000001234", "0000012345"]

3.2 padEnd 示例:
當(dāng)我們想右對(duì)齊打印多個(gè)不同長(zhǎng)度的項(xiàng)目時(shí),使用padEnd就非常方便了。

下面是一個(gè)非常好實(shí)例,它展示了padEnd 、padStart 和 Object.entries如何結(jié)合使用產(chǎn)生一個(gè)漂亮的輸出。

const cars = {

  "?BMW": "10",

  "?Tesla": "5",

  "?Lamborghini": "0"

}
Object.entries(cars).map(([name, count]) =>
{

  //padEnd appends "-" until the name becomes 20 characters

  //padStart prepends "0" until the count becomes 3 characters.

  console.log(`${name.padEnd(20, "-")} Count: ${count.padStart(3, "0")}`)

});
//Prints..

// ?BMW - - - - - - -  Count: 010

// ?Tesla - - - - - -  Count: 005

// ?Lamborghini - - -  Count: 000

3.3 ?? Emojis和其他雙字節(jié)字符上的padStart和padEnd
Emojis和其它雙字節(jié)字符串使用unicode的多字節(jié)表示。所以padStart和padEnd可能無(wú)法按照預(yù)期的工作??。

例如:假設(shè)我們嘗試用 ??表示符號(hào)填充字符中heart到10個(gè)字符,結(jié)果如下所示:

//Notice that instead of 5 hearts, there are only 2 hearts and 1 heart that looks odd!

"heart".padStart(10, "??");
// prints.. "?????heart"

這是因?yàn)???是2個(gè)碼長(zhǎng)("u2764uFE0F")!單詞heart是5個(gè)字符,所以我僅剩下5個(gè)字符用于填充。所以最終JS使用"u2764uFE0F"填充了兩個(gè)心型????。最一個(gè)?的產(chǎn)生是因?yàn)镴S僅使用了第一個(gè)字節(jié)u2764。

所以最后輸出: ?????heart

PS:你可通過(guò)這個(gè)鏈接查看unicode字符轉(zhuǎn)換。
4. Object.getOwnPropertyDescriptors

這個(gè)方法返回一個(gè)對(duì)象的所有屬性的詳細(xì)信息(包括get和set方法)。添加這個(gè)方法的主要目的是允許淺拷貝/克隆一個(gè)對(duì)象,包括對(duì)象上的getter和setter函數(shù),不同于Object.assign。

Object.assign 允許淺復(fù)制源對(duì)象上的所有屬性的詳細(xì)信息,除getter和setter函數(shù)外。

下面的示例通過(guò)拷貝一個(gè)原始對(duì)象Car到一個(gè)新對(duì)象ElectricCar,來(lái)展示Object.assign和Object.getOwnPropertyDescriptors以及Object.defineProperties之間的區(qū)別。你會(huì)發(fā)現(xiàn)使用Object.getOwnPropertyDescriptors,discount的getter和setter函數(shù)同樣被拷貝到目標(biāo)對(duì)象。

var Car = {

 name: "BMW",

 price: 1000000,

 set discount(x) {

  this.d = x;

 },

 get discount() {

  return this.d;

 },

};
//Print details of Car object"s "discount" property

console.log(Object.getOwnPropertyDescriptor(Car, "discount"));

//prints..

// { 

//   get: [Function: get],

//   set: [Function: set],

//   enumerable: true,

//   configurable: true

// }
//Copy Car"s properties to ElectricCar using Object.assign

const ElectricCar = Object.assign({}, Car);
//Print details of ElectricCar object"s "discount" property

console.log(Object.getOwnPropertyDescriptor(ElectricCar, "discount"));

//prints..

// { 

//   value: undefined,

//   writable: true,

//   enumerable: true,

//   configurable: true 


// }

//??Notice that getters and setters are missing in ElectricCar object for "discount" property !??
//Copy Car"s properties to ElectricCar2 using Object.defineProperties 

//and extract Car"s properties using Object.getOwnPropertyDescriptors

const ElectricCar2 = Object.defineProperties({}, Object.getOwnPropertyDescriptors(Car));
//Print details of ElectricCar2 object"s "discount"
property

console.log(Object.getOwnPropertyDescriptor(ElectricCar2, "discount"));

//prints..

// { get: [Function: get],  ??????

//   set: [Function: set],  ??????

//   enumerable: true,

//   configurable: true 

// }

// Notice that getters and setters are present in the ElectricCar2 object for "discount" property!
5. 在函數(shù)參數(shù)中添加尾隨逗號(hào)

這是一個(gè)小的更新,它允許我們?cè)诤瘮?shù)最后一個(gè)參數(shù)的后面添加尾隨逗號(hào)。為什么這么做?它可以幫助像git blame這樣的工具確認(rèn)所有的責(zé)任都是新的開(kāi)發(fā)者引起的。

下面的示例說(shuō)明這個(gè)問(wèn)題和解決方法。

注意:你可以尾隨逗號(hào)來(lái)調(diào)用函數(shù)。
6. Async/Await

如果你問(wèn)我,我會(huì)說(shuō)這個(gè)迄今為止最重要也是最有用的功能。異步函數(shù)允許們?cè)僖膊挥锰幚砘卣{(diào)地獄,同時(shí)使用整個(gè)代碼看起來(lái)很簡(jiǎn)單。

async關(guān)鍵字告訴JavaScript編譯器,以不同的方式處理這個(gè)函數(shù)。在函數(shù)內(nèi)執(zhí)行到await關(guān)鍵字時(shí),編譯器將會(huì)暫停。它假設(shè)在等待之后的表達(dá)式返回一個(gè)承諾,并等待承諾解決或拒絕后繼續(xù)執(zhí)行。

在這個(gè)示例中,getAmount函數(shù)將調(diào)用兩個(gè)異步的函數(shù)getUser 和 getBankBalance。我們可以通過(guò)Promise實(shí)現(xiàn),但使用async await會(huì)更加的優(yōu)雅和簡(jiǎn)單。.

6.1 異步函數(shù)本身返回一個(gè)Promise.
如果你想等待一個(gè)異步函數(shù)的返回結(jié)果,你需要你需要使用Promise’s then語(yǔ)法來(lái)捕獲返回結(jié)果。

在下面的示例中,我們想通過(guò)console.log來(lái)打印返回結(jié)果,而不是在doubleAndAdd函數(shù)內(nèi)部。所以我們想等函數(shù)返回結(jié)果并通過(guò)then語(yǔ)法將結(jié)果傳遞給console.log 。

6.2 并行調(diào)用async/await
在上一個(gè)示例中,我們調(diào)用了兩次await語(yǔ)句,每一次等待1s(共2s)。In the previous example we are calling await twice, but each time we are waiting for one second (total 2 seconds). 相反,我們可以使用Promise.all并行執(zhí)行兩次調(diào)用,因?yàn)閍和b。

6.3 async/await函數(shù)的錯(cuò)誤處理
使用async await時(shí),有各種方法來(lái)處理錯(cuò)誤。

選項(xiàng) 1?—在函數(shù)中使用try catch

//Option 1 - Use try catch within the function

async function doubleAndAdd(a, b) {

 try {

  a = await doubleAfter1Sec(a);

  b = await doubleAfter1Sec(b);

 } catch (e) {

  return NaN;
//return something

 }
return a + b;

}

//?Usage:

doubleAndAdd("one", 2).then(console.log);
// NaN

doubleAndAdd(1, 2).then(console.log);
// 6
function doubleAfter1Sec(param) {

 return new Promise((resolve, reject) =>
{

  setTimeout(function() {

   let val = param * 2;

   isNaN(val) ? reject(NaN) : resolve(val);

  }, 1000);

 });

}

Option 2— 捕獲每個(gè)一個(gè) await 表達(dá)式
因?yàn)槊恳粋€(gè)await表達(dá)式都返回一個(gè)Promise,你可以像下面展示在每一行上捕獲錯(cuò)誤。

//Option 2 - *Catch* errors on  every await line

//as each await expression is a Promise in itself

async function doubleAndAdd(a, b) {

 a = await doubleAfter1Sec(a).catch(e => console.log(""a" is NaN")); // ?

 b = await doubleAfter1Sec(b).catch(e => console.log(""b" is NaN")); // ?

 if (!a || !b) {

  return NaN;

 }

 return a + b;

}
//?Usage:

doubleAndAdd("one", 2).then(console.log);
// NaN  and logs:  "a" is NaN

doubleAndAdd(1, 2).then(console.log);
// 6
function doubleAfter1Sec(param) {

 return new Promise((resolve, reject) =>
{

  setTimeout(function() {

   let val = param * 2;

   isNaN(val) ? reject(NaN) : resolve(val);

  }, 1000);

 });

}

Option 3?—?捕獲整個(gè) async-await 函數(shù)

//Option 3 - Dont do anything but handle outside the function

//since async / await returns a promise, we can catch the whole function"s error

async function doubleAndAdd(a, b) {

 a = await doubleAfter1Sec(a);

 b = await doubleAfter1Sec(b);

 return a + b;

}
//?Usage:

doubleAndAdd("one", 2)

 .then(console.log)

.catch(console.log); // ???`<------- use "catch"
function doubleAfter1Sec(param) {

 return new Promise((resolve, reject) =>`
{

  setTimeout(function() {

   let val = param * 2;

   isNaN(val) ? reject(NaN) : resolve(val);

  }, 1000);

 });

}
ECMAScript目前正在最張草案中,將于2018年6月或7月發(fā)布。 is currently in final draft and will be out in June or July 2018. 下文函數(shù)的所有功能都將在Stage-4中,并將成為ECMAScript 2018的一部分。
1. 共享內(nèi)存和原子

這是一個(gè)偉大的、非常先進(jìn)的功能,是對(duì)JS引擎的核心增強(qiáng)。

它的主要思想是想為JS提供一些多線程的功能,以便JS開(kāi)發(fā)人員可以自己管理內(nèi)存(代替JS引擎對(duì)內(nèi)存的管理)來(lái)編寫(xiě)高性能的并發(fā)程序。

這是通過(guò)一種叫做SharedArrayBuffer的全局對(duì)象來(lái)實(shí)現(xiàn)的,它實(shí)質(zhì)上是將數(shù)據(jù)存儲(chǔ)在_共享_ 內(nèi)存空間中。所以這個(gè)數(shù)據(jù)可以在JS主線程和web-worker之間共享。

到現(xiàn)在為止,如果我們想在JS主線程和web-workers之間共享數(shù)據(jù),只能先復(fù)制數(shù)據(jù)然后使用postMessage 發(fā)送到其它線程。

現(xiàn)在,只需要使用SharedArrayBuffer,主線程和多個(gè)web工作線程即可訪問(wèn)共享數(shù)據(jù)。

但是在線程之間共享內(nèi)存會(huì)引發(fā)競(jìng)爭(zhēng)條件的產(chǎn)生。為了防止條件的產(chǎn)生引入了“Atomics”全局對(duì)象。 當(dāng)一個(gè)線程正在使用它的數(shù)據(jù)時(shí),Atomics 提供了各種方法來(lái)鎖定共享內(nèi)存。 它還提供了安全地更新共享內(nèi)存中的數(shù)據(jù)的方法。

建議通過(guò)某些庫(kù)來(lái)使用這些功能,但是現(xiàn)在還沒(méi)有構(gòu)建在此功能上的庫(kù)。

如果你有興趣,推薦閱讀:

From Workers to Shared Memor_y?—?_lucasfcosta
A cartoon intro to SharedArrayBuffers_?—?_Lin Clark
Shared memory and atomics_?—?_Dr. Axel Rauschmayer

2. 刪除標(biāo)簽?zāi)0遄址南拗?/b>

首先,我們要弄清楚“Tagged Template literal”是什么,這樣我們才能更好的理解這個(gè)特性。

在ES2015+中,有一個(gè)叫標(biāo)簽?zāi)0宓墓δ?,它允許開(kāi)發(fā)人員自定義如何插入字符串。例如,以標(biāo)簽方式插入字符串,如下所示... ...

在標(biāo)簽中,可以寫(xiě)一個(gè)函數(shù)來(lái)接收字符串常量部分,如[ ‘Hello ‘, ‘!’ ]和要替換的變量,如[ "Raja"], 把它們作為參數(shù)傳入自定義的函數(shù)(如greet),然后從這個(gè)自定義的函數(shù)中返回任何所需要的內(nèi)容。

下面的示例展示了我們自定義的標(biāo)簽函數(shù)greet給某個(gè)時(shí)間附加如“Good Morning!”、“Good afternoon”這些字符串,取決于某個(gè)具體的時(shí)間并返回一個(gè)自定義的字符串。

//A "Tag" function returns a custom string literal.

//In this example, greet calls timeGreet() to append Good //Morning/Afternoon/Evening depending on the time of the day.
function greet(hardCodedPartsArray, ...replacementPartsArray) {

 console.log(hardCodedPartsArray);
//[ "Hello ", "!" ]

 console.log(replacementPartsArray);
//[ "Raja" ]
let str = "";

 hardCodedPartsArray.forEach((string, i) =>
{

  if (i < replacementPartsArray.length) {

   str += `${string} ${replacementPartsArray[i] || ""}`;

  } else {

   str += `${string} ${timeGreet()}`;
//<-- append Good morning/afternoon/evening here

  }

 });

 return str;

}
//?Usage:

const firstName = "Raja";

const greetings = greet`Hello ${firstName}!`;
//??<-- Tagged literal
console.log(greetings);
//"Hello  Raja! Good Morning!"
?
function timeGreet() {

 const hr = new Date().getHours();

 return hr < 12

  ? "Good Morning!"

  : hr < 18 

  ? "Good Afternoon!"

  : "Good Evening!";

}

現(xiàn)在我們討論被當(dāng)作標(biāo)識(shí)名的函數(shù)到底是什么,許多人希望在不同的場(chǎng)景中使用這個(gè)功能,例如在終端命令和HTTP請(qǐng)求的URI構(gòu)成中,等。

??The problem with Tagged String literal
問(wèn)題是在ES2015和ES2016規(guī)范中不允許使用`“u” (unicode),“x”(hexadecimal) 等轉(zhuǎn)義字符,除非它們看起來(lái)完全像u00A9 或 u{2F804} 或 xA9。

因此,如果你在一個(gè)標(biāo)記函數(shù)內(nèi)使用其它域的規(guī)則(如終端規(guī)則),那么可能需要使用ubla123abla這種規(guī)則,它看起來(lái)不像u0049 或 u{@F804},然后你將會(huì)得到一個(gè)語(yǔ)法錯(cuò)誤。

在ES2018中,使用規(guī)則是非常寬松的,甚至無(wú)效的轉(zhuǎn)義字符。只要標(biāo)記函數(shù)通過(guò)對(duì)象返回屬性值,如“cooked”(無(wú)效字符串是“undefined”)和“raw”(包括任何其它你想要的屬性)。

function myTagFunc(str) { 

 return { "cooked": "undefined", "raw": str.raw[0] }

} 


var str = myTagFunc `hi 

正則表達(dá)式的“dotall”標(biāo)志

在現(xiàn)在的RegEx中,盡管(“.”)應(yīng)該匹配單個(gè)字符,便它不匹配會(huì)產(chǎn)生新的字符,像n r f等。

例如:

//Before

/first.second/.test("first
second");
//false

這個(gè)增強(qiáng)的功能可以使點(diǎn)運(yùn)算符匹配任何單符。為了確保不破壞任何內(nèi)容,我們需要使用s標(biāo)記來(lái)創(chuàng)建RegEx表示以使其能正常工作。

//ECMAScript 2018

/first.second/s.test("first
second");
//true   Notice: /s ??

以下是(提案)[https://github.com/tc39/propo...] 文檔中的全部API:

4. RegEx命名的組捕獲 ?

這個(gè)增強(qiáng)的功能模仿其它語(yǔ)言,如Python,Java等中帶來(lái)一個(gè)非常有用的特性叫“命名組”。此特性允許開(kāi)發(fā)人員編寫(xiě)RegExp時(shí),為RegExp中的組的不同部分提供格式為“(...)”的名稱(chēng)(標(biāo)識(shí)符)。 然后,他們可以使用該名稱(chēng)輕松獲取他們需要的任何組。

4.1 基本的命名組示例
在下面的示例中,我們使用(?) (?) and (?year)名稱(chēng)對(duì)日期RegEx的不同部分進(jìn)行分組。 結(jié)果對(duì)象現(xiàn)在將包含一個(gè)具groups屬性,它有year,month和year屬性及相應(yīng)的值。

4.2 在正則表達(dá)式本身內(nèi)使用命名組
我們可以使用k <組名>這種格式在正則表達(dá)式本身反向引用該組。 下面的例子展示它的工作原理:

4.3 在String.prototype.replace中使用命名組
現(xiàn)在,命名組這個(gè)特性已經(jīng)可以在字符串的實(shí)例方法replace中使用了,所以我們可以很容易地替換字符串的單詞。

例如,把“firstName, lastName”替換成“l(fā)astName, firstName”。

5. 對(duì)象的解構(gòu)屬性

解構(gòu)操作符 ... (三個(gè)...)允許我們提取對(duì)象中沿未提取的屬性。

5.1 你可以使用解構(gòu)來(lái)只提取你想要的屬性

5.2 更方便的是你可以刪除你不想要的屬 ??

6. 對(duì)象的屬性擴(kuò)展

擴(kuò)展屬性也是使用三個(gè)點(diǎn) ...,解構(gòu)屬性,不同的是使用擴(kuò)展創(chuàng)建(重新構(gòu)建)的是新的對(duì)象。

提醒:展開(kāi)運(yùn)算符用于等號(hào)的右側(cè),解構(gòu)運(yùn)算符用于等號(hào)的左側(cè)。

7. RegExp Lookbehind Assertions

這是RegEx的一個(gè)增強(qiáng)的功能,它可以使我們確保某些字符串一定在其它的字符中之前。

您現(xiàn)在可以使用一個(gè)組(?<= ...) (問(wèn)號(hào),小于,等于)來(lái)查找肯定的斷言。

此外,您可以使用(?<!...)(問(wèn)號(hào),小于,感嘆號(hào))來(lái)查看否定斷言。從本質(zhì)上講,只要-ve斷言通過(guò),就會(huì)匹配。

肯定的斷言: 比如說(shuō),我們希望確保#在單詞winning之前(即:#winning),并希望正則表達(dá)之返回字符串“winning”,下面展示它的寫(xiě)法。

否定的斷言: 比方說(shuō),我們希望獲取€而不是$字符之后的數(shù)字。

8. RegExp Unicode 轉(zhuǎn)義

要編寫(xiě)RegEx來(lái)匹配各種Unicode字符是很難的。諸如 w, W, d等只能匹配英文字符和數(shù)字。 但是對(duì)于印度語(yǔ),希臘語(yǔ)等其他語(yǔ)言的數(shù)字呢?

這就是Unicode Property Escapes的用武之地。結(jié)果是,Unicode為每個(gè)符號(hào)(字符)添加了元數(shù)據(jù)屬性,并使用它來(lái)對(duì)各種符號(hào)進(jìn)行分組或表征。

例如,Unicode數(shù)據(jù)庫(kù)將所有印地語(yǔ)字符(??????)分組在一個(gè)key為Script、值為Devanagari的屬性下,另一個(gè)key為Script_Extensions的屬性值也為Devanagari。所以我們可以搜索Script = Devanagari并獲得所有的印地文字符。

` Devanagari 可用于馬拉地語(yǔ),北印度語(yǔ),梵語(yǔ)等各種印度語(yǔ)言。

從ECMAScript 2018開(kāi)始,我們可以使用 p轉(zhuǎn)義字符和{Script = Devanagari}來(lái)匹配所有印度字符。 也就是說(shuō),我們可以在RegEx中使用: p {Script = Devanagari} 來(lái)匹配所有Devanagari字符。

//The following matches multiple hindi character

/^p{Script=Devanagari}+$/u.test("??????");
//true

//PS:there are 3 hindi characters h
同樣,Unicode數(shù)據(jù)庫(kù)將所有希臘字符組合為Script_Extensions(和Script)屬性,其值為Greek。 所以我們可以使用Script_Extensions = Greek或Script = Greek來(lái)搜索所有希臘字符。

也就是說(shuō),我們可以在RegEx中使用: p {Script = Greek} 以匹配所有Greek字符。

//The following matches a single Greek character

/p{Script_Extensions=Greek}/u.test("π"); // true
此外,Unicode數(shù)據(jù)庫(kù)將各種類(lèi)型的表情符號(hào)存儲(chǔ)在屬性值為“真”的布爾屬性Emoji,Emoji_Component,Emoji_Presentation,Emoji_Modifier和Emoji_Modifier_Base下。所以我們可以通過(guò)簡(jiǎn)單的選擇“Emoji”來(lái)搜索所有的表情符號(hào)。

也就是說(shuō),我們可以使用: p {Emoji} , Emoji_Modifier 等來(lái)匹配各種表情符號(hào)。

下面的例子將會(huì)說(shuō)明的更清晰一點(diǎn)。

//The following matches an Emoji character

/p{Emoji}/u.test("??");
//true
//The following fails because yellow emojis don"t need/have Emoji_Modifier!

/p{Emoji}p{Emoji_Modifier}/u.test("??");
//false
//The following matches an emoji characterp{Emoji} followed by p{Emoji_Modifier}

/p{Emoji}p{Emoji_Modifier}/u.test("??");
//true
//Explaination:

//By default the victory emoji is yellow color.

//If we use a brown, black or other variations of the same emoji, they are considered

//as variations of the original Emoji and are represented using two unicode characters.

//One for the original emoji, followed by another unicode character for the color.

//

//So in the below example, although we only see a single brown victory emoji,

//it actually uses two unicode characters, one for the emoji and another

// for the brown color.

//

//In Unicode database, these colors have Emoji_Modifier property.

//So we need to use both p{Emoji} and p{Emoji_Modifier} to properly and

//completely match the brown emoji.

/p{Emoji}p{Emoji_Modifier}/u.test("??");
//true

最后,我們可以使用大寫(xiě)的“P”( P )轉(zhuǎn)義字符而不是小p( p)來(lái)否定匹配。

參考:
ECMAScript 2018 Proposal
https://mathiasbynens.be/note...

Promise.prototype.finally()

finally() 是Promise新添加的實(shí)例方法。主要想法是允許在“resolve”或“reject”之后運(yùn)行回調(diào)來(lái)處理其它邏輯。 finally **回調(diào)被調(diào)用時(shí)沒(méi)有任何價(jià)值,并且無(wú)論如何總是被執(zhí)行。

看看不同的情況。

9. 異步迭代

這是一個(gè)非常有用的功能。 基本上它允許我們輕松創(chuàng)建異步代碼循環(huán)!

這個(gè)特性增加了一個(gè)新的“for-await-of”循環(huán),允許我們調(diào)用異步函數(shù)來(lái)返回承諾(或帶有一系列承諾的數(shù)組)。比較的酷的事情是,在下一個(gè)循環(huán)執(zhí)行之前當(dāng)前循環(huán)都會(huì)等待所有Promise返回承諾。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/94648.html

相關(guān)文章

  • ECMAScript 2016、20172018中所有新特性。

    摘要:在中,引入了代替。我們希望在為追加符讓所有項(xiàng)長(zhǎng)度都為位,以便顯示,我們可以使用,輕松實(shí)現(xiàn)這一點(diǎn)。 showImg(https://segmentfault.com/img/bVbdReM?w=1000&h=401); 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 跟蹤JavaScript (ECMAScript)中的新內(nèi)容是很困難的,而且更難找到有用的代碼示例。...

    glumes 評(píng)論0 收藏0
  • ECMAScript 2016、20172018中所有新特性。

    摘要:在中,引入了代替。我們希望在為追加符讓所有項(xiàng)長(zhǎng)度都為位,以便顯示,我們可以使用,輕松實(shí)現(xiàn)這一點(diǎn)。 showImg(https://segmentfault.com/img/bVbdReM?w=1000&h=401); 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 跟蹤JavaScript (ECMAScript)中的新內(nèi)容是很困難的,而且更難找到有用的代碼示例。...

    DesGemini 評(píng)論0 收藏0
  • FCC 成都社區(qū)·前端周刊 第 7 期

    摘要:詳情發(fā)布于月號(hào)發(fā)布了版本,除了性能改進(jìn)修復(fù)外,首次添加了貢獻(xiàn)者的安裝腳本。詳情中的應(yīng)用在中悄悄增加了對(duì)漸進(jìn)式應(yīng)用這一系列新技術(shù)的基本支持,這意味著現(xiàn)在可以在沒(méi)有批準(zhǔn)的情況下在上安裝應(yīng)用程序,不過(guò)會(huì)有一些限制。 01. ES2016, 2017, 2018 中的新特性 文章介紹了 18 個(gè) ECMAScript 2016,2017 和 2018 中新增加的特性,這些特性已被加入到 TC3...

    source 評(píng)論0 收藏0
  • FCC 成都社區(qū)·前端周刊 第 7 期

    摘要:詳情發(fā)布于月號(hào)發(fā)布了版本,除了性能改進(jìn)修復(fù)外,首次添加了貢獻(xiàn)者的安裝腳本。詳情中的應(yīng)用在中悄悄增加了對(duì)漸進(jìn)式應(yīng)用這一系列新技術(shù)的基本支持,這意味著現(xiàn)在可以在沒(méi)有批準(zhǔn)的情況下在上安裝應(yīng)用程序,不過(guò)會(huì)有一些限制。 01. ES2016, 2017, 2018 中的新特性 文章介紹了 18 個(gè) ECMAScript 2016,2017 和 2018 中新增加的特性,這些特性已被加入到 TC3...

    NikoManiac 評(píng)論0 收藏0
  • FCC 成都社區(qū)·前端周刊 第 7 期

    摘要:詳情發(fā)布于月號(hào)發(fā)布了版本,除了性能改進(jìn)修復(fù)外,首次添加了貢獻(xiàn)者的安裝腳本。詳情中的應(yīng)用在中悄悄增加了對(duì)漸進(jìn)式應(yīng)用這一系列新技術(shù)的基本支持,這意味著現(xiàn)在可以在沒(méi)有批準(zhǔn)的情況下在上安裝應(yīng)用程序,不過(guò)會(huì)有一些限制。 01. ES2016, 2017, 2018 中的新特性 文章介紹了 18 個(gè) ECMAScript 2016,2017 和 2018 中新增加的特性,這些特性已被加入到 TC3...

    hiYoHoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<