1. 程式人生 > 程式設計 >JS中的const命令你真懂它嗎

JS中的const命令你真懂它嗎

const 定義

const宣告一個只讀的常量 。一旦宣告, 常量的值就不能改變。
常量 所謂的常量就是不能改變的值

const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.

上面程式碼表明改變常量的值會報錯。

const宣告的變數不得改變值,這意味著,const一旦宣告變數,就必須立即初始化,不能留到以後賦值。

我們都知道const一般宣告一個只讀的常量,宣告之後就不能修改了,並且宣告時必須初始化

const message = 'hello'
message // hello
const message 
// ❌報錯SyntaxError: Missing initializer in const declaration
const message = 'hello'
message ='world'
// 報錯TypeError: Assignment to constant variable.

那大家有沒有遇到這樣的情況

const dog = {}
dog.name = 'wangcai'
dog // {name: "wangcai"}

奇怪,上面的例子明明改變了變數的值,為什麼沒有報錯?

下面我們就探究一下const的本質

本質


其實const保證的並不是變數的值不動,而是變數指向的記憶體地址不得改動
可能有點抽象,我們來細細分析一下const宣告的全過程

const message = 'hello'
  1. js看到變數message後,會給message分配一個空房間(記憶體空間)
  2. 看到等號右側的字串‘hello'時,會立馬給它安排另一個房間,並把‘hello'放到這個房間
  3. js會拿小本本抄下這個房間的房間號(記憶體地址)
  4. 把這個房間號放到message這個房間裡面,這時message中儲存的就是hello字串的儲存地址(即指標)

當我們再次賦值時

message = 'word'

js會將儲存‘word'字串的地址賦給message,而message又是用const定義的變數,不可以改變變數裡儲存的記憶體地址,這時就會❌報錯

而當遇到下面這種情況

const dog = {}
dog.name = 'wangcai'
dog // {name: "wangcai"}

則可以理解為
dog中儲存的是物件的房間號(記憶體地址)
dog.name= 'wangcai',在給物件新增屬性的過程,並沒有改變這個地址,所以結果正常顯示

劃重點
const保證的並不是變數的值不動,而是變數指向的記憶體地址不得改動

到此這篇關於JS中的const命令你真懂它嗎的文章就介紹到這了,更多相關JS const命令內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!