深入理解JS中使用const宣告常量

2021-10-03 09:28:15 字數 1193 閱讀 4796

js中使用const宣告的常量說是不可被改變,其實不能改變的是該常量的記憶體位址,當用const宣告乙個基本型別時,基本型別值就儲存在它指向的那個位址中,所以無法改變。

對於引用型別,當用const宣告乙個引用型別時,引用型別的記憶體位址是乙個指標,該指標指向的位址才是它的資料,const只能保證這個引用型別的指標不改變,而保證不了這個指標指向位址的資料不改變。

const宣告引用型別一般用於物件和陣列

先來看看陣列

const arr =

; arr =

['zzz'];

//報錯

const arr =

; arr[0]

='qqq'

; arr[1]

='www'

;//直接改變arr的資料

console.

log(arr)

//不報錯 輸出(2) ["qqq", "www"]

上面**中,第乙個報錯是因為arr = [『zzz』]相當於把[『zzz』]的位址賦給arr,會改變arr的位址,所以報錯,

第二個沒有報錯是因為arr的位址(指標)沒有被改變,改變的是他的位址(指標)指向的位址的資料。

接下來看看物件

const obj =

; obj =

console.

log(obj)

//報錯

const obj =

; obj.name =

'zhangsan'

; obj.age =

'22'

; console.

log(obj)

//

和陣列的情況一樣 obj 本身儲存的是乙個位址(指標),該位址(指標)指向的位址的資料是可修改的。

物件下的object.freeze方法可以真正使引用型別無法被修改

const obj = object.

freeze()

; obj.name =

'wangwu'

; console.

log(obj)

//{} 沒有起作用

js深入理解 一

1if a b 兩者等價 a b alert hello word 2.給eval取別名var a 111 var b eval var c b a alert c 輸出 111 3.刪除元素 不能刪除 var語句宣告的變數 var o delete o.x alert o.x 輸出 undefin...

js深入理解(二)

1.函式閉包var scope global scope function checkscope return f checkscope 輸出local scope var scope global scope function checkscope return f checkscope 輸出lo...

js深入理解(三)

1.物件的三個屬性 原型屬性 object.getprototypeof a 獲取a的原型 a.constructor.prootype 獲取a的原型 推薦 o.isprototypeof a 判讀o是否是a的原型 類屬性 function classof o classof o 輸出object ...