成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你可能錯過的現代 JavaScript 特性

開發 前端
盡管我在過去 7 年中幾乎每天都在寫 JavaScript 代碼,但不得不承認,我實際上并不是很注意 ES 語言的發布聲明。 async/await 和 Proxies 之類的主要特性是一回事,但是每年都有穩定的小規模、漸進式的改進在不斷涌現,因為總有一些東西需要學習。

 盡管我在過去 7 年中幾乎每天都在寫 JavaScript 代碼,但不得不承認,我實際上并不是很注意 ES 語言的發布聲明。 async/await 和 Proxies 之類的主要特性是一回事,但是每年都有穩定的小規模、漸進式的改進在不斷涌現,因為總有一些東西需要學習。

[[281396]]

所以在本文中,我收集了一些現代 JavaScript 特性,這些特性在首次發布時并沒有帶來太多的關注。其中一些只是編碼質量的提高,而另外一些確實很方便,可以減少很多代碼量。以下是你可能會錯過的一些信息:

ES2015

二進制和八進制

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

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

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

這使得處理二進制標志非常容易:

  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; 

對于八進制數也是如此。在 JS 世界中,這些領域有點小眾,但在網絡和某些文件格式中卻很常見?,F在你可以用語法 0o 處理八進制。

Number.isNaN()

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

你會發現,經典的 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 

是什么導致了這種結果?首先,這些參數實際上都不是 NaN。與以往一樣,問題出在大家“最喜歡的” JavaScript 特性上:類型強制。通過 Number 函數將 window.isNaN 的參數強制為數字。

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

  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 

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

ES2016

指數(冪)運算符

很高興有一個字面量的語法來表示冪:

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

(這很奇怪,因為我確信 JavaScript 已經有了這個 —— 我可能一直在考慮 Python)

Array.prototype.includes()

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

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

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

  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 可以通過第二個參數 fromIndex 讓你提供一個偏移量:

  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 

太順手了。

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

ES2017

共享數組緩沖區和原子操作

這是一對很棒的功能,如果你要與 web workers 一起做大量的工作,那么這些特性將被證明是無價的。它們使你可以直接在進程之間共享內存,并通過設置鎖來避免資源爭搶的情況。

它們都是相當復雜的 API 功能,因此這里不回對其進行概述,但是可以通過 Sitepen 的文章了解更多信息。目前有一些瀏覽器還不支持,但有望在未來幾年內得到改善。

ES2018

強大的正則表達式

ES2018引入了一整套正則表達式特性:

Lookbehind 匹配項(前向匹配)

在支持它的運行時中,你現在可以用正則表達式來進行前向匹配。例如要查找所有以美元開頭的數字:

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

關鍵是新的 lookbehind 搜索組與lookahead 搜索組是一對邪惡的雙胞胎:

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

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

你可以命名捕獲組

正則表達式真正強大的功能是能夠挑選出子匹配項,并用它們進行一些簡單的解析。但是直到不久前,我們只能通過數字來引用子匹配項,例如:

  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' 

現在有了一種語法,可以通過在要命名的每個組的括號的開頭放置 ? 來分配這些子匹配項(或捕獲組)的名稱:

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

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

現在可以用點匹配新行

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

ES2019

Array.prototype.flat() & flatMap()

我很高興在 MDN 上看到這些內容。

簡單地說,flat() 將多維數組按指定的最大 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 本質上是一個 map,也是深度為 1 的 flat。當從映射函數返回一個數組,但你不希望結果為嵌套數據結構時,用它很方便:

  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']; 

未綁定的捕獲

現在你可以編寫 try/catch 語句,而不必綁定拋出的錯誤:

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

順便說一句,對你不關心的 e 的值的捕獲行為,有時稱為 Pokémon 異常處理。 ‘因為你要捕獲所有的’!

字符串修剪方法

很小但是很好用:

  1. const padded         = '          Hello world   '
  2. padded.trimStart() === 'Hello world   '
  3. padded.trimEnd()   === '          Hello world'
責任編輯:華軒 來源: segmentfault
相關推薦

2021-05-15 08:30:40

DevOps測試趨勢

2025-01-10 08:00:00

JavaScript開發編程語言

2020-11-20 07:54:22

Java 特性語句

2023-04-09 23:37:31

JavaScript開發

2022-02-22 23:39:15

JavaScript編程語言Web

2020-03-09 10:10:02

AI 數據人工智能

2022-03-09 08:14:24

CSS容器container

2020-04-03 19:21:59

JavaScript編程語言開發

2018-08-21 09:00:31

Android Pie功能開發者

2024-01-03 15:59:56

Linux發行版

2022-01-17 22:33:37

Java特定類型

2020-11-16 12:09:25

Python開發工具

2020-05-09 08:48:21

JavaScript原生方法代碼

2021-10-09 10:50:30

JavaScript編程開發

2018-02-07 16:02:21

AI人工智能商用

2018-02-25 11:04:31

2017-11-07 21:58:25

前端JavaScript調試技巧

2020-11-03 09:51:04

JavaScript開發 技巧

2024-06-04 08:45:50

2022-10-17 15:47:19

JavaScript開發Web
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人一区 | 免费久草 | 天堂一区二区三区 | 精品视频一区二区三区四区 | 精品国产一区二区三区久久久蜜月 | 九九爱这里只有精品 | 麻豆av片| 亚洲天堂男人的天堂 | 国产欧美一区二区三区久久人妖 | 日韩免费看片 | 男人天堂网址 | 久久精品中文 | 国产精品不卡 | 久久视频精品 | 一a一片一级一片啪啪 | 三级国产三级在线 | av一区二区三区四区 | 日本一区二区在线视频 | 国产精品久久久久久 | 91xxx在线观看| 日操操| 亚洲深夜福利 | 国产日韩一区二区三免费高清 | 亚洲www啪成人一区二区麻豆 | 国产日韩亚洲欧美 | 久久久久国产视频 | 情侣酒店偷拍一区二区在线播放 | 夜夜爽99久久国产综合精品女不卡 | 欧美日韩在线免费观看 | 久久精品av麻豆的观看方式 | 99免费 | 亚洲免费一区二区 | 国产一二区免费视频 | 国产综合视频 | 国产一级黄色网 | 国产高清久久久 | 免费观看毛片 | 国产成人99久久亚洲综合精品 | 久久尤物免费一区二区三区 | 国产精品视频一 | 国产一级片在线观看视频 |