<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JS的這些新特性,你都用過么?

          共 5582字,需瀏覽 12分鐘

           ·

          2024-05-09 09:16

          點(diǎn)擊上方 前端Q,關(guān)注公眾號(hào)

          回復(fù)加群,加入前端Q技術(shù)交流群


          作為一門不斷演進(jìn)的語言,JavaScript每年都會(huì)引入新特性。這些特性的加入,能夠幫助我們編寫更加簡(jiǎn)潔、高效、易于維護(hù)的代碼。然而,并非所有新特性都會(huì)立即廣泛應(yīng)用。它們的采用往往取決于社區(qū)的接受度以及瀏覽器的支持情況。比如我,會(huì)根據(jù)項(xiàng)目需求、團(tuán)隊(duì)習(xí)慣以及特性的成熟度來選擇是否使用這些新特性。以下是一些我認(rèn)為特別有用的新JavaScript特性,以及一些補(bǔ)充的實(shí)例代碼,大家一起共勉。

          可選鏈

          可選鏈讓我們能夠以安全的方式訪問嵌套對(duì)象的屬性,避免因?yàn)橹虚g某個(gè)屬性不存在而拋出錯(cuò)誤。

          const user = {
            profile: {
              name'John Doe',
              contact: {
                email'[email protected]',
              },
            },
          };

          const userEmail = user.profile?.contact?.email;
          console.log(userEmail); // "[email protected]"

          const userPhone = user.profile?.contact?.phone;
          console.log(userPhone); // 輸出undefined, 而不是拋出錯(cuò)誤

          空值合并運(yùn)算符

          空值合并運(yùn)算符允許我們?yōu)榭赡苁?code style="color: rgb(30, 107, 184);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05);width: auto;height: auto;margin-left: 2px;margin-right: 2px;padding: 2px 4px;border-style: none;border-width: 3px;border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4);border-radius: 4px;font-family: Operator Mono, Consolas, Monaco, Menlo, monospace;word-break: break-all;">null或undefined的值提供一個(gè)默認(rèn)值。

          const defaultAge = 25;
          const userAge = null;

          const age = userAge ?? defaultAge;
          console.log(age); // 25

          Promise.allSettled()

          這個(gè)方法讓我們可以在所有的Promise都得到解決之后,無論是fulfilled還是rejected,都可以獲得每一個(gè)Promise的結(jié)果。

          const promise1 = Promise.resolve(3);
          const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100'foo'));
          const promises = [promise1, promise2];

          Promise.allSettled(promises)
            .then((results) => results.forEach((result) => console.log(result.status))); // "fulfilled", "rejected"

          動(dòng)態(tài)導(dǎo)入

          動(dòng)態(tài)導(dǎo)入讓我們可以在代碼運(yùn)行時(shí)按需加載模塊。

          button.addEventListener('click'async () => {
            try {
              const module = await import('./module1.js');
              module.load();
            } catch (error) {
              console.error('Module loading failed:', error);
            }
          });

          BigInt

          BigInt是一種新的數(shù)值類型,讓我們可以安全地操作大整數(shù)。

          const largeNumber = BigInt('9007199254740991');
          const anotherLargeNumber = 9007199254740992n// 末尾的n表示BigInt

          console.log(largeNumber + anotherLargeNumber); // 18014398509481983n

          top-level await

          top-level await允許我們?cè)谀K頂層使用await關(guān)鍵字,簡(jiǎn)化了異步導(dǎo)入和操作的代碼邏輯。

          const data = await fetchData('api/data');
          console.log(data);

          邏輯賦值運(yùn)算符

          這些運(yùn)算符結(jié)合了邏輯運(yùn)算符和賦值運(yùn)算符。

          let a = null;
          let b = 'default';
          a ||= b;
          console.log(a); // "default"

          let x = 1;
          let y = 3;
          x &&= y;
          console.log(x); // 1

          String.prototype.replaceAll()

          replaceAll方法讓我們可以更容易地替換字符串中的所有匹配項(xiàng),而不僅僅是第一個(gè)匹配項(xiàng)。

          let str = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';

          let newStr = str.replaceAll('dog''monkey');
          console.log(newStr);
          // "The quick brown fox jumps over the lazy monkey. If the monkey reacted, was it really lazy?"

          WeakRefs 和 FinalizationRegistry

          這些新特性有助于管理內(nèi)存。WeakRef對(duì)象允許您保持對(duì)另一個(gè)對(duì)象的弱引用,而不會(huì)阻止該對(duì)象被垃圾回收。FinalizationRegistry對(duì)象允許您在對(duì)象被垃圾回收時(shí)執(zhí)行一些清理工作。

          let obj = {};
          const weakRef = new WeakRef(obj);

          const registry = new FinalizationRegistry((value) => {
            console.log(`The object ${value} will be garbage collected.`);
          });

          registry.register(obj, 'myObj');

          // 某個(gè)時(shí)間后,如果obj不再被其他引用,垃圾回收器會(huì)清除obj
          obj = null;

          總結(jié)

          新特性的引入總是帶來了新的編程范式和工具,我們可以利用它們來提升我們的開發(fā)效率和代碼質(zhì)量。隨著新特性逐步融入我們的日常工作,我們需要保持學(xué)習(xí)的態(tài)度,不斷適應(yīng)和采納這些新工具。

          盡管如此,我們也要考慮到項(xiàng)目的現(xiàn)實(shí)需求,如瀏覽器兼容性和團(tuán)隊(duì)的熟悉度,以確保新特性的引入不會(huì)對(duì)項(xiàng)目造成負(fù)面影響。

          最終,合理利用現(xiàn)代JavaScript特性,我們能夠編寫出更加現(xiàn)代化、高效且可維護(hù)的前端代碼

          作者:純愛掌門人

          原文:https://juejin.cn/post/7321294927592456203


          往期推薦


          js如何控制一次只加載一張圖片,加載完成后再加載下一張
          面試官:假如有幾十個(gè)請(qǐng)求,如何去控制并發(fā)?
          前端權(quán)限開發(fā)——設(shè)計(jì)到實(shí)踐(保姆級(jí))

          最后


          • 歡迎加我微信,拉你進(jìn)技術(shù)群,長(zhǎng)期交流學(xué)習(xí)...

          • 歡迎關(guān)注「前端Q」,認(rèn)真學(xué)前端,做個(gè)專業(yè)的技術(shù)人...

          點(diǎn)個(gè)在看支持我吧

          瀏覽 76
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  内射啪啪网站 | 国产亚洲精品色爽无码 | 黄片视频在线免费播放 | 美女特黄视频 | 国产精品色在线 |