精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

盤點總結ECMAScript新版本的四大功能的神秘之處

如意 ? 來源:讀芯術微信公眾號 ? 作者:讀芯術微信公眾號 ? 2020-10-10 09:53 ? 次閱讀

2020年可能已經位列史上最糟糕年份TOP5了。那么不妨忘記今年,期待一下2021會有什么驚喜吧!沒錯,明年我們將迎來新版ECMAScript(也就是常說的JavaScript)。本文中,筆者將快速帶你先來了解一下其為何物。

replaceAll字符串的方法

這一方法早就有了,現有的 replace方法早就應該有所成效。也許你不知道,目前來自String對象的 replace方法只會影響所找到的第一個匹配,當然,除非你使用正則表達式而不是簡單的字符串作為第一個參數

這并非是很大的進步,更多的是一種補充,但還是值得贊賞。

盤點總結ECMAScript新版本的四大功能的神秘之處

方法和訪問器的私密化修改器

目前還沒聽說私密化有何進展(該提案還停留在第三階段),但是作為未來的一個嘗試,我們將能夠對方法和訪問器設置可見性。這里的“可見性”是指將它們設置為私人化,意味著我們終于有了保護代碼的基本方式,并開始慢慢地走向更面向OOP的編碼方式(并不是說我們現在的函數式方法有什么問題)。

盤點總結ECMAScript新版本的四大功能的神秘之處

實質上,你正在用#字符來使方法或訪問器私密化。這個字符也會成為該名稱的一部分,所以如果你想使用上面所提到的方法,可以簡單地用 this.#Age 或者 this.#myPrivateMethod()。

在這兩種情況下,如果你試圖從一類之外甚至從擴展了的類里面使用它們,都會出現異常(要等到有了保護方法之后再使用)。

終結器和弱引用?

這兩個有趣的工具可以幫助處理內存使用問題,并管理垃圾收集。不過,除非你需要特別注意內存的使用,不然不太需要用到這兩個工具。

注意,下面的兩個功能涉及垃圾收集器的工作方式,但安裝啟用只針對一個運行時。這意味著編寫依賴于非標準安裝的業務邏輯很可能會產生意想不到的結果。即使有了這些工具,也要在使用前要清楚自己的目的。

(1) 弱引用

在介紹弱引用之前,我先快速介紹一下強引用,以便你理解弱引用的優勢。強引用本質上是一個指向目標的指針,在JavaScript中,這只是一個變量,你已經將目標分配到這個變量中。比如說:

盤點總結ECMAScript新版本的四大功能的神秘之處

上文中,myP是一個有效的強引用,直到它不復存在。一旦對一個對象的所有強引用被消除,那么垃圾收集器就可以自由地銷毀這個對象,并釋放它的內存以便用于其他事情。也就是說,有些情況下,比如下面這種,強引用可能會鎖定一個目標,以至于永遠無法釋放。

盤點總結ECMAScript新版本的四大功能的神秘之處

在上面的例子中,兩個對象都是相互引用的,所以即使me和sibling變量都不在范圍內,因此,去掉引用,在內部每個對象都對另一個對象有一個強引用。在實踐中,這意味著這些對象永遠不會被收集。這么做完全沒有問題,除非你是在一個內存非常小的設備中使用JS。

(2) 輸入弱參考

對強引用有所了解之后,弱引用就很好理解啦。弱引用本質上是一種保留對象引用而不影響垃圾收集器行為的方法。在前面的例子中,如果sibling性能會使用弱引用構造來設置,那么就可以收集這些對象。弱引用的另一個用例是緩存結構,因為人們不希望緩存的對象內部引用過于活躍。

盤點總結ECMAScript新版本的四大功能的神秘之處

上面的例子非常基礎,使用弱引用就是這么簡單。只要記住,如果你想訪問被引用的對象,要用deref方法。因為這是一個弱引用,就需要檢查deref的返回值,如果它是未定義的,就說明這個對象不再存在,否則可以安全地使用它(因此在 get 方法中進行IF檢查)。

(3) 終結器

現在,在頂部的 cherrie 中,終結器允許你對弱引用對象收集垃圾的事實做出反應。同樣,這也是高度具體化的實現,以下是使用方法:

盤點總結ECMAScript新版本的四大功能的神秘之處

本質上,這里用了FinalizationRegistry 來創建注冊表,需要用回調函數作為參數。在每次收集一個對象(之前用register 方法注冊的)時都會用到這個函數。

register 方法本身是用來指定所等待的對象的重構方法,它的第二個參數是在創建注冊表時傳遞給初始定義的回調的值。建議你少用這個方法,特別是不要想著用它來做業務,但是可以考慮在特殊情況下用它來解決一些新奇的問題。

Promise.any

在這個版本中,ECMAScript中增加了一個同時處理多個承諾的方法。any方法可以運行多個承諾,并用第一個解決的承諾來解決后面的問題,或者等到所有的承諾都失敗并返回到一個AggregateError對象處(它是Error對象的一個子類)。

那么,any和race之間有什么區別呢?事實上,race只要有一個承諾會實現或失敗,它就會進行結算并返值。然而,any 會用第一個結算值進行結算,或者等待所有的值都失敗了,再一起恢復所有錯誤。

const promise1 =Promise.reject(0); const promise2 =newPromise((resolve) =》setTimeout(resolve, 100, ‘quick’)); const promise3 =newPromise((resolve) =》setTimeout(resolve, 500, ‘slow’)); const promises = [promise1, promise2, promise3]; Promise.race(promises).then((value) =》 console.log(value)); //logs the rejected promise //vs Promise.any(promises).then((value) =》 console.log(value)); //logs “quick”

注意any實際上忽略了第一個被拒絕的承諾,因為還有其他的承諾正在解決,這就是race和any的主要區別。

ECMAScript2021的新特征不多,但已經被接受的功能筆者看來非常好!使用WeakRef和FinalizationRegistry時要小心哦,它們的功能非常有趣,但它們在不同的運行情況下處理的結果或行為可能會不一樣。

你最喜歡哪個新功能?對于這個版本,你最期待的又是什么呢?
責編AJX

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    577

    瀏覽量

    20486
  • javascript
    +關注

    關注

    0

    文章

    516

    瀏覽量

    53793
  • ECMA
    +關注

    關注

    0

    文章

    3

    瀏覽量

    3820
收藏 人收藏

    評論

    相關推薦

    LABview最新版本

    請問LABview的最新版本是什么?
    發表于 11-07 15:42

    如何使用更新版本的MbedTLS?

    。ST在CubeMX中更新版本需要多長時間?我將如何使用更新版本的 MbedTLS?似乎我有兩個選擇。一種是使用 ST 版本構建項目,然后使用新版本的 MbedTLS 手動更新文件 -
    發表于 12-15 09:06

    FilterPro v3.0設計工具的最新版本

    FilterPro v3.0設計工具的最新版本 TI推出其普及型 FilterProTM 設計工具的最新版本。該 FilterPro v3.0 更新了各種功能,如調節無源元件容差、查看
    發表于 05-17 13:36 ?8166次閱讀

    MathWorks推出 MATLAB 的重要新版本

     中國北京 – 2014 年10月9日 – MathWorks今日宣布,推出MATLAB的重要新版本。作為2014b版本的一部分,重大的更新功能包括了全新的圖形系統、大數據功能以及經過
    發表于 10-09 15:44 ?4515次閱讀

    新版本IAR工具下載

    新版本IAR工具下載
    發表于 11-23 17:35 ?0次下載

    新版本IAR破解視頻教程

    新版本IAR破解視頻教程
    發表于 12-17 11:06 ?0次下載

    應用每隔一段時間都會發布一個新版本,小米5C應用自動升級教程

    應用每隔一段時間都會發布一個新版本新版本會修復舊版本上發現的問題,以及加入一些新的功能,那什么如何才能一直保持應用都是最新版本呢?那就是開
    發表于 04-17 14:30 ?2723次閱讀

    新版本數據平面開發套件(DPDK)的功能介紹

    了解最新版本的DPDK。每個版本附帶的功能清單都是升級的,我們將描述每個版本如何影響在其應用程序中使用它的NFV用戶。
    的頭像 發表于 11-05 06:49 ?6678次閱讀

    360極速瀏覽器新版本四大亮點

    今天360極速瀏覽器發布新版本版本號為12.0,新版具備“四大亮點”:Chromium78全新內核、DNS加密防劫持、暗夜炫黑模式、4K高清視頻播放,號稱全方位實現暢快瀏覽體驗。
    的頭像 發表于 11-26 14:39 ?3629次閱讀

    Keil MDK和IAR EWARM新版本問題方案

    Keil MDK和IAR EWARM新版本,及不同版本兼容性問題
    的頭像 發表于 01-10 14:47 ?4847次閱讀

    開源3D圖形工具新版本:引入大量新功能和改進

    雖然失敗了,但沒準第次就會成功,主要是鼓勵別放棄)。 最新版本進一步改善了用戶體驗,提供了一系列新的功能,包括全新的 Booleans,為布雕和大量物體修改引入碰撞支持,并承諾改進諸多動畫工具。 雕刻在此
    的頭像 發表于 11-27 17:46 ?1626次閱讀

    ASCII對照表最新版本下載

    ASCII對照表最新版本下載
    發表于 08-23 10:53 ?0次下載

    谷歌發布Chrome新版本

    近日,谷歌正式發布Chrome 100,該瀏覽器今天剛剛發布了版本號為 100 的最新版本,目前,Mac、Windows、安卓和iOS平臺都已經開始同步推送更新,新版本將會繼續減少內存、CPU占用率等情況。
    的頭像 發表于 03-30 16:54 ?2374次閱讀

    Motor-CAD最新版本的NVH功能介紹

    Motor-CAD最新版本的電機NVH快速分析功能,可用于電機概念設計階段快速對比不同設計方案的NVH水平,在設計初期定位潛在的共振頻率段,指導電機NVH優化設計的方向。在本次電機仿真進階研修班中,將對Motor-CAD最新版本
    的頭像 發表于 12-12 10:35 ?3564次閱讀

    CANoe新版本18正式發布

    新版本持續為電動智能軟件開發測試帶來系列化的新功能新版本CANoe產品體系包括具有GUI交互的桌面版本、可部署在服務器后云端的服務器版本
    的頭像 發表于 05-09 08:25 ?3170次閱讀
    CANoe<b class='flag-5'>新版本</b>18正式發布