關於 const 中定義的復合型別 為什麼可以改變

2021-10-21 03:30:06 字數 1531 閱讀 5707

對於 const 問題回答時:我會回答 const 定義的是乙個唯讀的常量 而且定義的資料 不能改變 一旦宣告變數必須馬上初始化 同時沒有變數提公升、會造成暫時性死區、只在宣告的塊級({})作用中有效

const ac =

"1";

ac =2;

// 報錯assignment to constant variable.

if

('istrue'

) console.

log(chunknum)

;// chunknum is not defined `在這裡插入**片`

console.

log(b)

;// cannot access 'b1' before initialization

const b =

"2b"

這些我覺得我把 const 的這個宣告的方式 說完了 但是又丟擲來乙個問題 const 中的宣告的物件 可以修改嗎? 有點蒙蔽 我會說 不會 因為宣告的基本型別 number string 都是不行的 (其實或許在自己 不留意的時候 可能就這麼去寫過讓 const 宣告物件的** 記不起來了而已 ) 但是答案是否定 可以去修改物件中的值 為什麼可以做呢

const 本質上 又是什麼呢 (其實大家如果好好讀了 阮老師的es6阮老師es6知識整理 的文章 就能理解了 其實我看了好幾遍 都沒有認認真真的去看這個知識點 )

// 以下文字借鑑於 阮老師的文章

const 實質上保證的不是變數值不得改動而是變數指向的那個記憶體位址所儲存的資料不得改動對於簡單資料型別值就儲存在變數指向的記憶體位址、 對於復合型別 也叫引用型別(多用於 物件和 陣列)變數指向的記憶體位址、儲存的只是乙個實際資料的指標、const 保證只是這個指標是固定的。它指向的資料結構是不是可變的 就不受控制了

const objc =

// 新增乙個屬性 name;

objc.name =

"李四"

console.

log(objc.foo)

// "111"

// 賦值為乙個新的物件

objc =

;// 報錯 assignment to constant variable.

上述**中 變數objc 儲存的是乙個位址 (個人理解:也就是上面所說的指標) 這個位址是乙個物件;

不可變的是這個位址,物件裡面的資料 是可以變得.可以去新增屬性 或者呼叫物件的方法 都是可以的;只要不改變物件本身都是可以的。

說乙個題外話(又不是很外…) objc = {} 報錯的原因 不知道是不是 空物件 是不等於 空物件的 // {} === {} = false;如果物件本身相同的話 是不是可以理解為 物件本身並沒有改變、、但是說過指標是固定的 所以還是不行。。

(希望可以對你學習 或者 面試有幫助)

c 學習總結 復合型別,const。

複習c 有必要對一些東西做一下筆記,方便以後學習,如有問題,歡迎提出。首先,最常用兩種復合型別應該是引用和指標。所謂復合型別,是在基本型別基礎 如 int 上定義的型別。引用是c 的乙個復合型別,首先,它和指標不同的是它並不是乙個物件,僅僅只是另乙個物件的別名。而且,引用繫結的東西必須是乙個物件,引...

關於復合型別的學習

一 指標和引用 1.指標 型別 指標變數 例如 int pi 簡單的使用方法 int ival 120 int pi ival 注意 定義指標時指定的型別實際上是指標指向的物件的型別 通過指標可以直接給物件賦值 定義指標時必需給指標初始化。初始化指標的方法 int pi nullptr int pi...

復合型別與const關鍵字

前面我們講了指標和引用的基本用法 指標用法 引用用法 現在我們來看比較複雜的型別 指標引用。不存在引用指標 這是復合型別 指標引用 顧名思義 指標引用就是對指標的引用。int i 0 pi i int rpi pi 這裡的指標引用應該這樣閱讀 int rpi 即是rpi是引用 是對整形指標的引用 c...