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 ...