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

TypeScript 中 Const 和 Readonly 的區(qū)別?枚舉和常量枚舉的區(qū)別?

開發(fā) 前端
ypeScript 中的只讀修飾符,可以聲明更加嚴(yán)謹(jǐn)?shù)目勺x屬性,通常在 interface 、 Class 、 type 以及 array 和 tuple 類型中使用它,也可以用來定義一個函數(shù)的參數(shù)。

[[415240]]

本文轉(zhuǎn)載自微信公眾號「三分鐘學(xué)前端」,作者sisterAn 。轉(zhuǎn)載本文請聯(lián)系三分鐘學(xué)前端公眾號。

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

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

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

TypeScript 中 readonly

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

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

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

區(qū)別

  • const 用于變量, readonly 用于屬性
  • const 在運行時檢查, readonly 在編譯時檢查
  • const 聲明的變量不得改變值,這意味著,const 一旦聲明變量,就必須立即初始化,不能留到以后賦值; readonly 修飾的屬性能確保自身不能修改屬性,但是當(dāng)你把這個屬性交給其它并沒有這種保證的使用者(允許出于類型兼容性的原因),他們能改變
  1. const foo: { 
  2.   readonly bar: number; 
  3. } = { 
  4.   bar: 123 
  5. }; 
  6.  
  7. function iMutateFoo(foo: { bar: number }) { 
  8.   foo.bar = 456; 
  9.  
  10. iMutateFoo(foo); 
  11. console.log(foo.bar); // 456 

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

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

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

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

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

  1. // 枚舉 
  2. enum Color { 
  3.   Red, 
  4.   Green, 
  5.   Blue 
  6.  
  7. // 常量枚舉 
  8. const enum Color { 
  9.   Red, 
  10.   Green, 
  11.   Blue 

區(qū)別

  • 枚舉會被編譯時會編譯成一個對象,可以被當(dāng)作對象使用
  • const 枚舉會在 typescript 編譯期間被刪除,const 枚舉成員在使用的地方會被內(nèi)聯(lián)進來,避免額外的性能開銷
  1. // 枚舉 
  2. enum Color { 
  3.   Red, 
  4.   Green, 
  5.   Blue 
  6.  
  7. var sisterAn = Color.Red 
  8. // 會被編譯成 JavaScript 中的 var sisterAn = Color.Red 
  9. // 即在運行執(zhí)行時,它將會查找變量 Color 和 Color.Red 

  1. // 常量枚舉 
  2. const enum Color { 
  3.   Red, 
  4.   Green, 
  5.   Blue 
  6.  
  7. var sisterAn = Color.Red 
  8. // 會被編譯成 JavaScript 中的 var sisterAn = 0 
  9. // 在運行時已經(jīng)沒有 Color 變量 

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

 

責(zé)任編輯:武曉燕 來源: 三分鐘學(xué)前端
相關(guān)推薦

2009-08-17 18:04:49

C# 枚舉

2009-08-27 10:54:09

C# const和st

2025-03-07 08:53:33

TypeScript普通枚舉反向映射

2024-09-29 08:35:34

TypeScript枚舉安全性

2020-11-19 08:04:10

JS變量Const

2009-10-12 16:56:36

VB.NET常量VB.NET枚舉

2011-04-11 13:00:08

C++結(jié)構(gòu)體枚舉

2023-12-07 11:47:00

TypeScript特殊值

2022-05-06 09:21:21

TypeScriptinterfacetype

2022-02-25 09:19:32

TypeScript輔助函數(shù)枚舉

2022-09-02 09:02:44

TypeInterface

2023-10-12 08:25:18

Javaequals內(nèi)存

2025-05-09 09:25:00

2022-04-07 16:03:36

JavaScriptTypeScript

2010-11-22 12:59:30

MySQL字段

2010-08-30 10:32:38

SPANDIV

2015-08-10 10:58:53

dompropertyattribute

2010-09-01 15:11:09

linkimportCSS

2012-03-01 14:04:03

Java

2010-09-08 09:33:09

CSSlink@import
點贊
收藏

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

主站蜘蛛池模板: 亚洲久久一区 | 九九久久免费视频 | 久久一 | 国产高清在线观看 | 国产最新精品视频 | 精品国产乱码久久久久久久久 | 精品国产欧美 | 男女啪啪高潮无遮挡免费动态 | 黄色国产视频 | 九九亚洲 | 亚洲视频在线看 | 999久久久 | 啪啪av| 亚洲欧洲精品一区 | 欧美自拍另类 | 性高湖久久久久久久久aaaaa | 精品久久久久久久久久 | 国产精品成人一区二区三区 | 国产精品美女久久久久久久久久久 | 中文字幕国产精品视频 | 日本黄色片免费在线观看 | 欧美1区2区 | 精品二三区 | 成人欧美一区二区三区 | 亚洲香蕉 | 国产一区二区免费 | av在线伊人 | 国产精品综合 | 欧美精品一区在线 | 欧美性猛交一区二区三区精品 | 精品美女视频在线观看免费软件 | 欧美成人综合 | 91精品国产91久久久久游泳池 | 亚洲精品大全 | 亚洲午夜视频在线观看 | 久久高清免费视频 | 国产高清久久久 | 成人午夜电影在线观看 | 成人性生交大片免费看r链接 | 91色视频在线 | 色在线免费视频 |