1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        TypeScript 中 const 和 readonly 的區(qū)別?枚舉和常量枚舉的區(qū)別?

        共 2933字,需瀏覽 6分鐘

         ·

        2021-08-29 09:15


        點擊上方 三分鐘學前端,關注公眾號

        回復交流,加入前端編程面試算法每日一題群


        面試官也在看的前端面試資料

        TypeScript 中 const 與 readonly 的區(qū)別?

        TypeScript 中不可變量的實現(xiàn)方法有兩種:

        • 使用 ES6 的 const 關鍵字聲明的值類型
        • 被 readonly 修飾的屬性

        TypeScript 中 readonly

        TypeScript 中的只讀修飾符,可以聲明更加嚴謹?shù)目勺x屬性

        通常在 interface 、 Class 、 type 以及 array 和 tuple 類型中使用它,也可以用來定義一個函數(shù)的參數(shù)

        // type
        type Foo = {
          readonly bar: number;
        };
        // const 確保 'config' 不能夠被改變了
        const foo: Foo = { bar: 123 };
        // 不能被改變
        foo.bar = 456// Error: foo.bar 為僅讀屬性
        // 函數(shù)
        function foo(config: { readonly num: number }{
          // ..
        }
        const config = { num: 123 }
        foo(config)

        區(qū)別

        1. const 用于變量, readonly 用于屬性

        2. const 在運行時檢查, readonly 在編譯時檢查

        3. const 聲明的變量不得改變值,這意味著,const 一旦聲明變量,就必須立即初始化,不能留到以后賦值; readonly 修飾的屬性能確保自身不能修改屬性,但是當你把這個屬性交給其它并沒有這種保證的使用者(允許出于類型兼容性的原因),他們能改變

        const foo: {
          readonly bar: number;
        } = {
          bar: 123
        };

        function iMutateFoo(foo: { bar: number }{
          foo.bar = 456;
        }

        iMutateFoo(foo);
        console.log(foo.bar); // 456

        此時,需要 iMutateFoo 明確的表示,他們的參數(shù)不可修改,那么編譯器會發(fā)出錯誤警告:

        function iTakeFoo(foo: Foo{
          foo.bar = 456// Error: bar 屬性只讀
        }
        1. const 保證的不是變量的值不得改動,而是變量指向的那個內存地址不得改動,例如使用 const 變量保存的數(shù)組,可以使用 push , pop 等方法。但是如果使用 ReadonlyArray<number> 聲明的數(shù)組不能使用 push , pop 等方法。

        枚舉和常量枚舉的區(qū)別?

        枚舉和常量枚舉(const枚舉)

        使用枚舉可以清晰地表達意圖或創(chuàng)建一組有區(qū)別的用例

        // 枚舉
        enum Color {
          Red,
          Green,
          Blue
        }

        // 常量枚舉
        const enum Color {
          Red,
          Green,
          Blue
        }

        區(qū)別

        1. 枚舉會被編譯時會編譯成一個對象,可以被當作對象使用
        2. const 枚舉會在 typescript 編譯期間被刪除,const 枚舉成員在使用的地方會被內聯(lián)進來,避免額外的性能開銷
        // 枚舉
        enum Color {
          Red,
          Green,
          Blue
        }

        var sisterAn = Color.Red
        // 會被編譯成 JavaScript 中的 var sisterAn = Color.Red
        // 即在運行執(zhí)行時,它將會查找變量 Color 和 Color.Red
        // 常量枚舉
        const enum Color {
          Red,
          Green,
          Blue
        }

        var sisterAn = Color.Red
        // 會被編譯成 JavaScript 中的 var sisterAn = 0
        // 在運行時已經(jīng)沒有 Color 變量

        來源:https://github.com/Advanced-Frontend/Daily-Interview-Question

        最后

        歡迎關注「三分鐘學前端」,回復「交流」自動加入前端三分鐘進階群,每日一道編程算法面試題(含解答),助力你成為更優(yōu)秀的前端開發(fā)!

        號內回復:

        網(wǎng)絡」,自動獲取三分鐘學前端網(wǎng)絡篇小書(90+頁)
        JS」,自動獲取三分鐘學前端 JS 篇小書(120+頁)
        算法」,自動獲取 github 2.9k+ 的前端算法小書
        面試」,自動獲取 github 23.2k+ 的前端面試小書
        簡歷」,自動獲取程序員系列的 120 套模版
        》》面試官也在看的前端面試資料《《
        “在看和轉發(fā)”就是最大的
        瀏覽 53
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            人人操人人搞人人摸 | www.九色 | 东京热99 | 欧美肥妇b| 中文字幕第六页 | 在教室伦流澡到高潮h女视频 | 流量变现@wuking6 | 五月天丁香婷婷亚洲 | 一级激情网 | AV天堂资源成人 |