自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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 在運(yùn)行時檢查, 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枚舉)

使用枚舉可以清晰地表達(dá)意圖或創(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)進(jìn)來,避免額外的性能開銷
  1. // 枚舉 
  2. enum Color { 
  3.   Red, 
  4.   Green, 
  5.   Blue 
  6.  
  7. var sisterAn = Color.Red 
  8. // 會被編譯成 JavaScript 中的 var sisterAn = Color.Red 
  9. // 即在運(yùn)行執(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. // 在運(yùn)行時已經(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枚舉安全性

2009-10-12 16:56:36

VB.NET常量VB.NET枚舉

2020-11-19 08:04:10

JS變量Const

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)存

2022-04-07 16:03:36

JavaScriptTypeScript

2010-11-22 12:59:30

MySQL字段

2016-12-06 10:30:39

JavaScriptWriteWriteln

2009-06-29 18:32:30

Hibernate

2011-05-19 17:41:20

SenderSelf

2024-03-19 14:41:08

C#操作符開發(fā)

2010-09-01 15:11:09

linkimportCSS

2015-08-10 10:58:53

dompropertyattribute
點贊
收藏

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