国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

7個(gè)令人興奮的 JavaScript 新特性

開(kāi)發(fā) 前端 開(kāi)發(fā)工具
一個(gè)ECMAScript標(biāo)準(zhǔn)的制作過(guò)程,包含了Stage 0到Stage 4五個(gè)階段,每個(gè)階段提交至下一階段都需要TC39審批通過(guò)。本文介紹這些新特性處于Stage 3或者Stage 4階段,這意味著應(yīng)該很快在瀏覽器和其他引擎中支持這些特性。

一個(gè)ECMAScript標(biāo)準(zhǔn)的制作過(guò)程,包含了Stage 0到Stage 4五個(gè)階段,每個(gè)階段提交至下一階段都需要TC39審批通過(guò)。本文介紹這些新特性處于Stage 3或者Stage 4階段,這意味著應(yīng)該很快在瀏覽器和其他引擎中支持這些特性。

[[286773]]

一、類的私有變量

最新提案之一是在類中添加私有變量的方法。我們將使用 # 符號(hào)表示類的私有變量。這樣就不需要使用閉包來(lái)隱藏不想暴露給外界的私有變量。

  1. class Counter { 
  2.   #x = 0
  3.  
  4.   #increment() { 
  5.     this.#x++; 
  6.   } 
  7.  
  8.   onClick() { 
  9.     this.#increment(); 
  10.   } 
  11.  
  12. const c = new Counter(); 
  13. c.onClick(); // 正常 
  14. c.#increment(); // 報(bào)錯(cuò) 

通過(guò) # 修飾的成員變量或成員函數(shù)就成為了私有變量,如果試圖在 Class 外部訪問(wèn),則會(huì)拋出異常。現(xiàn)在,此特性可在最新版本的 Chrome 和 Node.js中使用。

二、可選鏈操作符

你可能碰到過(guò)這樣的情形:當(dāng)需要訪問(wèn)嵌套在對(duì)象內(nèi)部好幾層的屬性時(shí),會(huì)得到臭名昭著的錯(cuò)誤Cannot read property 'stop' of undefined,然后你就要修改你的代碼來(lái)處理來(lái)處理屬性鏈中每一個(gè)可能的undefined對(duì)象,比如:

  1. edProp = obj && obj.first && obj.first.second; 

在訪問(wèn)obj.first.second之前,obj和obj.first 的值要被確認(rèn)非null(且不是undefined)。目的是為了防止錯(cuò)誤發(fā)生,如果簡(jiǎn)單直接的訪問(wèn)obj.first.second而不對(duì)obj和obj.first 進(jìn)行校驗(yàn)就有可能產(chǎn)生錯(cuò)誤。

有了可選鏈?zhǔn)秸{(diào)用 ,你只要這樣寫(xiě)就可以做同樣的事情:

  1. let nestedProp = obj?.first?.second; 

如果obj或obj.first是null/undefined,表達(dá)式將會(huì)短路計(jì)算直接返回undefined。

三、空位合并操作符

我們?cè)陂_(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到這樣場(chǎng)景:變量如果是空值,則就使用默認(rèn)值,我們是這樣實(shí)現(xiàn)的:

  1. let c = a ? a : b // 方式1 
  2. let c = a || b // 方式2 

這兩種方式有個(gè)明顯的弊端,它都會(huì)覆蓋所有的假值,如(0, '', false),這些值可能是在某些情況下有效的輸入。

為了解決這個(gè)問(wèn)題,有人提議創(chuàng)建一個(gè)“nullish”合并運(yùn)算符,用 ?? 表示。有了它,我們僅在第一項(xiàng)為 null 或 undefined 時(shí)設(shè)置默認(rèn)值。

  1. let c = a ?? b; 
  2. // 等價(jià)于let c = a !== undefined && a !== null ? a : b; 

例如有以下代碼:

  1. const x = null
  2. const y = x ?? 500; 
  3. console.log(y); // 500 
  4. const n = 0 
  5. const m = n ?? 9000; 
  6. console.log(m) // 0 

四、BigInt

JS在Math上一直很糟糕的原因之一是,無(wú)法精確表示大于的數(shù)字2 ^ 53,這使得處理相當(dāng)大的數(shù)字變得非常困難。

  1. 1234567890123456789 * 123; 
  2. // -> 151851850485185200000 // 計(jì)算結(jié)果丟失精度 

幸運(yùn)的是,BigInt(大整數(shù))就是來(lái)解決這個(gè)問(wèn)題。你可以在BigInt上使用與普通數(shù)字相同的運(yùn)算符,例如 +, -, /, *, %等等。

創(chuàng)建 BigInt 類型的值也非常簡(jiǎn)單,只需要在數(shù)字后面加上 n 即可。例如,123 變?yōu)?123n。也可以使用全局方法 BigInt(value) 轉(zhuǎn)化,入?yún)?value 為數(shù)字或數(shù)字字符串。

  1. const aNumber = 111
  2. const aBigInt = BigInt(aNumber); 
  3. aBigInt === 111n // true 
  4. typeof aBigInt === 'bigint' // true 
  5. typeof 111 // "number" 
  6. typeof 111n // "bigint" 

只要在數(shù)字末尾加上 n,就可以正確計(jì)算大數(shù)了:

  1. 1234567890123456789n * 123n; 
  2. // -> 151851850485185185047n 

不過(guò)有一個(gè)問(wèn)題,在大多數(shù)操作中,不能將 BigInt與Number混合使用。比較Number和 BigInt是可以的,但是不能把它們相加。

  1. 1n < 2 
  2. // true 
  3.  
  4. 1n + 2 
  5. // Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions 

現(xiàn)在,此特性可在最新版本的 Chrome 和 Node.js中使用。

五、static 字段

它允許類擁有靜態(tài)字段,類似于大多數(shù)OOP語(yǔ)言。靜態(tài)字段可以用來(lái)代替枚舉,也可以用于私有字段。

  1. class Colors { 
  2.   // public static 字段 
  3.   static red = '#ff0000'
  4.   static green = '#00ff00'
  5.  
  6.   // private static 字段 
  7.   static #secretColor = '#f0f0f0'
  8.  
  9.  
  10. font.color = Colors.red; 
  11. font.color = Colors.#secretColor; // 出錯(cuò) 

現(xiàn)在,此特性可在最新版本的 Chrome 和 Node.js中使用。

六、Top-level await

ES2017(ES8)中的 async/await 特性僅僅允許在 async 函數(shù)內(nèi)使用 await 關(guān)鍵字,新的提案旨在允許 await 關(guān)鍵字在頂層內(nèi)容中的使用,例如可以簡(jiǎn)化動(dòng)態(tài)模塊加載的過(guò)程:

  1. const strings = await import(`/i18n/${navigator.language}`); 

這個(gè)特性在瀏覽器控制臺(tái)中調(diào)試異步內(nèi)容(如 fetch)非常有用,而無(wú)需將其包裝到異步函數(shù)中。

另一個(gè)使用場(chǎng)景是,可以在以異步方式初始化的 ES 模塊的頂層使用它(比如建立數(shù)據(jù)庫(kù)連接)。當(dāng)導(dǎo)入這樣的“異步模塊”時(shí),模塊系統(tǒng)將等待它被解析,然后再執(zhí)行依賴它的模塊。這種處理異步初始化方式比當(dāng)前返回一個(gè)初始化promise并等待它解決來(lái)得更容易。一個(gè)模塊不知道它的依賴是否異步。

  1. // db.mjs 
  2. export const connection = await createConnection(); 
  1. // server.mjs 
  2. import { connection } from './db.mjs'; 
  3. server.start(); 

在此示例中,在server.mjs中完成連接之前不會(huì)執(zhí)行任何操作db.mjs。

現(xiàn)在,此特性可在最新版本的 Chrome中使用。

七、WeakRef

一般來(lái)說(shuō),在 JavaScript 中,對(duì)象的引用是強(qiáng)保留的,這意味著只要持有對(duì)象的引用,它就不會(huì)被垃圾回收。

  1. const ref = { x: 42, y: 51 }; 
  2. // 只要我們?cè)L問(wèn) ref 對(duì)象(或者任何其他引用指向該對(duì)象),這個(gè)對(duì)象就不會(huì)被垃圾回收 

目前在 Javascript 中,WeakMap 和 WeakSet 是弱引用對(duì)象的唯一方法:將對(duì)象作為鍵添加到 WeakMap 或 WeakSet 中,是不會(huì)阻止它被垃圾回收的。

  1. const wm = new WeakMap(); 
  2.   const ref = {}; 
  3.   const metaData = 'foo'
  4.   wm.set(ref, metaData); 
  5.   wm.get(ref); 
  6.   // 返回 metaData 
  7. // 在這個(gè)塊范圍內(nèi),我們已經(jīng)沒(méi)有對(duì) ref 對(duì)象的引用。 
  8. // 因此,雖然它是 wm 中的鍵,我們?nèi)匀豢梢栽L問(wèn),但是它能夠被垃圾回收。 
  9.  
  10. const ws = new WeakSet(); 
  11. ws.add(ref); 
  12. ws.has(ref);// 返回 true 

JavaScript 的 WeakMap 并不是真正意義上的弱引用:實(shí)際上,只要鍵仍然存活,它就強(qiáng)引用其內(nèi)容。WeakMap 僅在鍵被垃圾回收之后,才弱引用它的內(nèi)容。

WeakRef 是一個(gè)更高級(jí)的 API,它提供了真正的弱引用,Weakref 實(shí)例具有一個(gè)方法 deref,該方法返回被引用的原始對(duì)象,如果原始對(duì)象已被收集,則返回undefined對(duì)象。

  1. const cache = new Map(); 
  2. const setValue =  (key, obj) => { 
  3.   cache.set(key, new WeakRef(obj)); 
  4. }; 
  5.  
  6. const getValue = (key) => { 
  7.   const ref = cache.get(key); 
  8.   if (ref) { 
  9.     return ref.deref(); 
  10.   } 
  11. }; 
  12.  
  13. // this will look for the value in the cache 
  14. // and recalculate if it's missing 
  15. const fibonacciCached = (number) => { 
  16.   const cached = getValue(number); 
  17.   if (cached) return cached; 
  18.   const sum = calculateFibonacci(number); 
  19.   setValue(number, sum); 
  20.   return sum; 
  21. }; 

總而言之,JavaScript 中對(duì)象的引用是強(qiáng)引用,WeakMap 和 WeakSet 可以提供部分的弱引用功能,若想在 JavaScript 中實(shí)現(xiàn)真正的弱引用,可以通過(guò)配合使用 WeakRef 和終結(jié)器(Finalizer)來(lái)實(shí)現(xiàn)。

現(xiàn)在,此特性可在最新版本的 Chrome 和 Node.js中使用。

 

責(zé)任編輯:趙寧寧 來(lái)源: 前端工匠
相關(guān)推薦

2019-12-25 09:00:00

JavascriptWeb前端

2021-08-30 10:58:08

Linus TorvaLinux KerneLinux

2020-08-01 15:37:19

5G無(wú)線技術(shù)網(wǎng)絡(luò)

2023-09-07 16:23:22

2020-03-18 09:10:58

物聯(lián)網(wǎng)醫(yī)療安全

2011-08-18 09:16:54

OpenFlow協(xié)議控制器

2020-02-26 07:22:30

工業(yè)物聯(lián)網(wǎng)IIOT物聯(lián)網(wǎng)

2018-05-13 16:17:23

醫(yī)療保健物聯(lián)網(wǎng)物聯(lián)網(wǎng)應(yīng)用

2024-04-29 07:53:22

Go語(yǔ)言Go-cli 項(xiàng)目工具

2011-11-16 09:40:19

Windows 8操作系統(tǒng)

2021-11-26 22:19:34

物聯(lián)網(wǎng)醫(yī)療應(yīng)用

2019-12-27 16:10:53

前端javascriptnode.js

2022-01-24 18:20:17

辦公室物聯(lián)網(wǎng)

2021-06-05 09:47:18

Windows1操作系統(tǒng)微軟

2023-05-17 16:18:01

Linux默認(rèn)設(shè)置

2017-12-21 04:31:38

物聯(lián)網(wǎng)技術(shù)趨勢(shì)

2020-11-09 16:00:26

LinuxLinux內(nèi)核

2020-10-19 11:49:31

物聯(lián)網(wǎng)納米技術(shù)數(shù)據(jù)

2023-02-28 09:30:38

2024-08-05 08:38:13

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

avav在线看| 亚洲乱码国产一区三区| 色香欲www7777综合网| www成人在线观看| 国产色视频一区| jizz亚洲女人高潮大叫| 无吗不卡中文字幕| 欧美 国产 综合| 亚洲天堂激情| 91国内在线视频| 依依综合在线| 色狠狠桃花综合| 亚洲综合日韩欧美| 狠狠色综合日日| 国产精品人成电影在线观看| 欧美影视资讯| 精品日韩av一区二区| 99re6热在线精品视频播放| 成人国产精品免费| 日本在线播放不卡| 99re久久最新地址获取| 欧美精品福利视频| 国产精品天堂蜜av在线播放| 欧美成人精品福利| 91电影在线播放| 亚洲h精品动漫在线观看| 日韩少妇内射免费播放18禁裸乳| 久久蜜桃精品| 国产精品二区二区三区| 欧洲激情综合| 久久亚洲精品一区| 欧美成人ⅴideosxxxxx| 欧美v亚洲v综合ⅴ国产v| 成人77777| 亚洲第一福利一区| 特黄aaaaaaaaa毛片免费视频| 中文字幕高清一区| 亚洲综合欧美激情| 久久午夜羞羞影院免费观看| av动漫在线播放| 韩国毛片一区二区三区| 日本欧洲国产一区二区| 亚洲国内自拍| 欧美精品一区二区三区在线看午夜| 欧美日韩爆操| 91视频免费在线观看| 婷婷中文字幕一区| 亚洲aaa激情| 黄色精品网站| 精品乱码一区二区三区| 国产精品毛片| 亚洲精品一区二区三区樱花 | 成人羞羞网站入口免费| 日本精品久久久久影院| 精品国产一级毛片| 91欧美精品成人综合在线观看| 小小影院久久| 你懂的网址一区二区三区| 日本在线不卡一区| 激情五月五月婷婷| 久久综合视频网| 成年人免费网站| 欧美亚洲国产一区二区三区va | 91禁国产网站| 不卡中文字幕| 成人蜜桃视频| 美女任你摸久久| 国内精品视频一区二区三区| 中文字幕高清不卡| 日韩av视屏| 亚洲国内精品视频| 国产午夜精品一区在线观看| 国产精品wwww| 亚洲专区在线| 丝袜老师办公室里做好紧好爽| 国产精品国产三级国产专播品爱网 | 成年网站在线视频网站| 国产一区二区三区18| 成人在线视频你懂的| 成人疯狂猛交xxx| 日韩激情视频在线观看| 久久这里只有精品23| 亚洲激情图片一区| 中文字幕伦理免费在线视频| 日韩一区av在线| 清纯唯美综合亚洲| 亚洲韩国在线| 国产精品久久久久久久久免费丝袜 | 精品伦理精品一区| 免费精品一区| 超碰在线观看97| 成人精品小蝌蚪| 夜色福利资源站www国产在线视频| 精品国产青草久久久久福利| 91精品一久久香蕉国产线看观看| 成人黄色免费在线观看| 美国三级日本三级久久99| 五月天电影免费在线观看一区| 欧美日韩国产一级片| 亚洲欧美在线综合| 国产精品嫩草在线观看| 久久女同性恋中文字幕| 一广人看www在线观看免费视频| 久久天天躁狠狠躁夜夜av| 国内精品亚洲| 99热手机在线| 精品国产免费一区二区三区香蕉| 美女网站色精品尤物极品姐弟| 好吊色欧美一区二区三区视频| 国产欧美一区二区三区鸳鸯浴 | freexxx性亚洲精品| 欧洲亚洲在线视频| 欧美aaaaaa午夜精品| 免费高清成人| 亚洲精品日韩欧美| 欧美日韩亚洲国产精品| 亚洲色精品三区二区一区| 欧美一区二区日韩一区二区| 欧美激情极品| 日本久久高清视频| 欧美精品99久久久**| 精品视频亚洲| 波多野结衣之无限发射| 在线播放国产精品二区一二区四区| 欧美大奶一区二区| 性高湖久久久久久久久aaaaa| 欧美精品久久99| 成人毛片免费看| 久久久国产欧美| 在线日韩日本国产亚洲| 99综合精品| 波多野结衣av在线| 91精品国产91久久久久久| 国产成人av电影在线| 日韩欧美在线看| aa在线观看视频| 欧美一级xxx| 好吊日精品视频| 天天操夜夜干| 欧美劲爆第一页| 91在线云播放| 少妇高潮一区二区三区99| 一区二区三区四区免费视频| 在线播放欧美女士性生活| 欧美日韩视频一区二区三区| 免费在线观看麻豆视频 | 99在线热播| 亚洲成a人片综合在线| 午夜免费欧美电影| 国产 国语对白 露脸| 日韩欧美aaaaaa| 新67194成人永久网站| 超碰国产在线观看| 成人午夜在线视频一区| 亚洲一区视频在线| 色综合久久网| 日日噜噜夜夜狠狠视频| 777午夜精品福利在线观看| 久久精品无码一区二区三区| 伊人久久精品| 鲁一鲁一鲁一鲁一澡| 精品国产一区二区三区在线观看 | 国产激情视频一区| 亚洲欧美福利一区二区| 另类图片第一页| 成人18免费入口| 欧美一级电影久久| 亚洲va欧美va人人爽午夜| 日本不卡高清| 伊人75在线| 91观看网站| 欧美日韩在线三级| 久久国产精品99国产| 国产激情视频在线看| 日韩精品久久一区二区| 久久夜色撩人精品| 欧美国产欧美亚州国产日韩mv天天看完整 | 成人短视频下载| 视频二区欧美| av五月婷婷| 91免费版网站在线观看| 欧美日韩欧美一区二区| 日av在线不卡| 成人精品国产| 先锋影音资源综合在线播放av| 国产美女久久精品香蕉69| 91福利在线观看| 免费人成在线不卡| 亚洲久草在线| 久久白虎精品| 久久99精品久久久久久水蜜桃 | 亚洲黄色成人久久久| 中日韩午夜理伦电影免费| 中文一区二区完整视频在线观看| 日本天堂一区| 毛片在线看网站| 每日在线观看av| 日韩av快播网址| 日韩一区二区麻豆国产| 91丨porny丨国产入口|