日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
你可能錯(cuò)過(guò)的現(xiàn)代JavaScript特性

 盡管我在過(guò)去 7 年中幾乎每天都在寫(xiě) JavaScript 代碼,但不得不承認(rèn),我實(shí)際上并不是很注意 ES 語(yǔ)言的發(fā)布聲明。 async/await 和 Proxies 之類(lèi)的主要特性是一回事,但是每年都有穩(wěn)定的小規(guī)模、漸進(jìn)式的改進(jìn)在不斷涌現(xiàn),因?yàn)榭傆幸恍〇|西需要學(xué)習(xí)。

創(chuàng)新互聯(lián)建站是專(zhuān)業(yè)的黃岡網(wǎng)站建設(shè)公司,黃岡接單;提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行黃岡網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

所以在本文中,我收集了一些現(xiàn)代 JavaScript 特性,這些特性在首次發(fā)布時(shí)并沒(méi)有帶來(lái)太多的關(guān)注。其中一些只是編碼質(zhì)量的提高,而另外一些確實(shí)很方便,可以減少很多代碼量。以下是你可能會(huì)錯(cuò)過(guò)的一些信息:

ES2015

二進(jìn)制和八進(jìn)制

在 JavaScript 中,二進(jìn)制操作并不常見(jiàn),但有時(shí)也會(huì)遇到,否則無(wú)法切實(shí)解決你的問(wèn)題。你可能正在為低功耗設(shè)備編寫(xiě)高性能代碼,將位壓縮到本地存儲(chǔ)中,在瀏覽器中進(jìn)行像素 RGB 操作,或者必須處理緊密打包的二進(jìn)制數(shù)據(jù)格式。

這可能意味著有很多工作需要對(duì)二進(jìn)制數(shù)字進(jìn)行處理,我一直覺(jué)得用十進(jìn)制也能做這些事。好吧,ES6 為此添加了一個(gè)二進(jìn)制數(shù)字格式:0b

 
 
 
  1. const binaryZero = 0b0; 
  2. const binaryOne  = 0b1; 
  3. const binary255  = 0b11111111; 
  4. const binaryLong = 0b111101011101101; 

這使得處理二進(jìn)制標(biāo)志非常容易:

 
 
 
  1. // Pizza toppings 
  2. const olives    = 0b0001; 
  3. const ham       = 0b0010; 
  4. const pineapple = 0b0100; 
  5. const artechoke = 0b1000; 
  6.  
  7. const pizza_ham_pineapple = pineapple | ham; 
  8. const pizza_four_seasons  = olives | ham | artechoke; 

對(duì)于八進(jìn)制數(shù)也是如此。在 JS 世界中,這些領(lǐng)域有點(diǎn)小眾,但在網(wǎng)絡(luò)和某些文件格式中卻很常見(jiàn)?,F(xiàn)在你可以用語(yǔ)法 0o 處理八進(jìn)制。

Number.isNaN()

不要與 window.isNaN() 混淆,這是一種有著更直觀(guān)行為的新方法。

你會(huì)發(fā)現(xiàn),經(jīng)典的 isNaN 有一些有趣的怪癖:

 
 
 
  1. isNaN(NaN)              === true 
  2. isNaN(null)             === false 
  3. isNaN(undefined)        === true 
  4. isNaN({})               === true 
  5. isNaN('0/0')            === true 
  6. isNaN('hello')          === true 

是什么導(dǎo)致了這種結(jié)果?首先,這些參數(shù)實(shí)際上都不是 NaN。與以往一樣,問(wèn)題出在大家“最喜歡的” JavaScript 特性上:類(lèi)型強(qiáng)制。通過(guò) Number 函數(shù)將 window.isNaN 的參數(shù)強(qiáng)制為數(shù)字。

好吧,新的 Number.isNaN() 靜態(tài)方法解決了所有問(wèn)題。它會(huì)一勞永逸地返回你提供的自變量與 NaN 的相等性。這是絕對(duì)明確的:

 
 
 
  1. Number.isNaN(NaN)       === true 
  2. Number.isNaN(null)      === false 
  3. Number.isNaN(undefined) === false 
  4. Number.isNaN({})        === false 
  5. Number.isNaN('0/0')     === false 
  6. Number.isNaN('hello')   === false 

函數(shù)簽名: Number.isNaN : (value: any) => boolean

ES2016

指數(shù)(冪)運(yùn)算符

很高興有一個(gè)字面量的語(yǔ)法來(lái)表示冪:

 
 
 
  1. 2**2 === 4 
  2. 3**2 === 9 
  3. 3**3 === 27 

(這很奇怪,因?yàn)槲掖_信 JavaScript 已經(jīng)有了這個(gè) —— 我可能一直在考慮 Python)

Array.prototype.includes()

這個(gè)功能值得關(guān)注,如果你過(guò)去幾年一直在寫(xiě) array.indexOf(x)!== -1 這樣的代碼,那么現(xiàn)在可以用新的 includes 方法:

 
 
 
  1. [1, 2, 3].includes(2)    === true 
  2. [1, 2, 3].includes(true) === false 

includes 用 Same Value Zero Algorithm(幾乎與嚴(yán)格等式 === 相同)進(jìn)行檢查,但它可以處理 NaN 值。像相等檢查一樣,它將通過(guò)引用而不是內(nèi)容來(lái)比較對(duì)象:

 
 
 
  1. const object1 = {}; 
  2. const object2 = {}; 
  3.  
  4. const array = [object1, 78, NaN]; 
  5.  
  6. array.includes(object1) === true 
  7. array.includes(object2) === false 
  8. array.includes(NaN)     === true 

includes 可以通過(guò)第二個(gè)參數(shù) fromIndex 讓你提供一個(gè)偏移量:

 
 
 
  1. // positions   0  1  2  3  4 
  2. const array = [1, 1, 1, 2, 2]; 
  3.  
  4. array.includes(1, 2) === true 
  5. array.includes(1, 3) === false 

太順手了。

函數(shù)簽名: Array.prototype.includes : (match: any, offset?: Int) => boolean

ES2017

共享數(shù)組緩沖區(qū)和原子操作

這是一對(duì)很棒的功能,如果你要與 web workers 一起做大量的工作,那么這些特性將被證明是無(wú)價(jià)的。它們使你可以直接在進(jìn)程之間共享內(nèi)存,并通過(guò)設(shè)置鎖來(lái)避免資源爭(zhēng)搶的情況。

它們都是相當(dāng)復(fù)雜的 API 功能,因此這里不回對(duì)其進(jìn)行概述,但是可以通過(guò) Sitepen 的文章了解更多信息。目前有一些瀏覽器還不支持,但有望在未來(lái)幾年內(nèi)得到改善。

ES2018

強(qiáng)大的正則表達(dá)式

ES2018引入了一整套正則表達(dá)式特性:

Lookbehind 匹配項(xiàng)(前向匹配)

在支持它的運(yùn)行時(shí)中,你現(xiàn)在可以用正則表達(dá)式來(lái)進(jìn)行前向匹配。例如要查找所有以美元開(kāi)頭的數(shù)字:

 
 
 
  1. const regex = /(?<=\$)\d+/; 
  2. const text  = 'This cost $400'; 
  3. text.match(regex) === ['400'] 

關(guān)鍵是新的 lookbehind 搜索組與lookahead 搜索組是一對(duì)邪惡的雙胞胎:

 
 
 
  1. Look ahead:  (?=abc) 
  2. Look behind: (?<=abc) 
  3.  
  4. Look ahead negative:  (?!abc) 
  5. Look behind negative: (?

不幸的是,目前還沒(méi)有什么方法可以為較舊的瀏覽器支持新的后向語(yǔ)法,所以你目前只能在 Node 上用它。

你可以命名捕獲組

正則表達(dá)式真正強(qiáng)大的功能是能夠挑選出子匹配項(xiàng),并用它們進(jìn)行一些簡(jiǎn)單的解析。但是直到不久前,我們只能通過(guò)數(shù)字來(lái)引用子匹配項(xiàng),例如:

 
 
 
  1. const getNameParts  = /(\w+)\s+(\w+)/g; 
  2. const name          = "Weyland Smithers"; 
  3. const subMatches    = getNameParts.exec(name); 
  4.  
  5. subMatches[1]     === 'Weyland' 
  6. subMatches[2]     === 'Smithers' 

現(xiàn)在有了一種語(yǔ)法,可以通過(guò)在要命名的每個(gè)組的括號(hào)的開(kāi)頭放置 ? 來(lái)分配這些子匹配項(xiàng)(或捕獲組)的名稱(chēng):

 
 
 
  1. const getNameParts  = /(?\w+)\s(?\w+)/g; 
  2. const name          = "Weyland Smithers"; 
  3. const subMatches    = getNameParts.exec(name); 
  4.  
  5. const {first, last} = subMatches.groups 
  6. first             === 'Weyland' 
  7. last              === 'Smithers' 

不幸的是,目前暫時(shí)只有 Chrome 和 Node 支持。

現(xiàn)在可以用點(diǎn)匹配新行

你只需要提供 /s 標(biāo)志,例如 /someRegex./s、`/anotherRegex./sg。

ES2019

Array.prototype.flat() & flatMap()

我很高興在 MDN 上看到這些內(nèi)容。

簡(jiǎn)單地說(shuō),flat() 將多維數(shù)組按指定的最大 depth 展平:

 
 
 
  1. const multiDimensional = [ 
  2.     [1, 2, 3], 
  3.     [4, 5, 6], 
  4.     [7,[8,9]]
  5. ]; 
  6.  
  7. multiDimensional.flat(2) === [1, 2, 3, 4, 5, 6, 7, 8, 9] 

flatMap 本質(zhì)上是一個(gè) map,也是深度為 1 的 flat。當(dāng)從映射函數(shù)返回一個(gè)數(shù)組,但你不希望結(jié)果為嵌套數(shù)據(jù)結(jié)構(gòu)時(shí),用它很方便:

 
 
 
  1. const texts = ["Hello,", "today I", "will", "use FlatMap"]; 
  2.  
  3. // with a plain map 
  4. const mapped = texts.map(text => text.split(' ')); 
  5. mapped === ['Hello', ['today', 'I'], 'will', ['use', 'FlatMap']]; 
  6.  
  7. // with flatmap 
  8. const flatMapped = texts.flatMap(text => text.split(' ')); 
  9. flatMapped === ['Hello', 'today', 'I', 'will', 'use', 'FlatMap']; 

未綁定的捕獲

現(xiàn)在你可以編寫(xiě) try/catch 語(yǔ)句,而不必綁定拋出的錯(cuò)誤:

 
 
 
  1. try { 
  2.   // something throws 
  3. } catch { 
  4.   // don't have to do catch(e) 

順便說(shuō)一句,對(duì)你不關(guān)心的 e 的值的捕獲行為,有時(shí)稱(chēng)為 Pokémon 異常處理。 ‘因?yàn)槟阋东@所有的’!

字符串修剪方法

很小但是很好用:

 
 
 
  1. const padded         = '          Hello world   '; 
  2. padded.trimStart() === 'Hello world   '; 
  3. padded.trimEnd()   === '          Hello world'; 

分享文章:你可能錯(cuò)過(guò)的現(xiàn)代JavaScript特性
網(wǎng)址分享:http://www.5511xx.com/article/coodhgg.html