let與const區別

admin發表於2018-10-14

let與const都是ES2015新增,兩者具體用法參閱如下兩篇文章。

(1).let可以參閱JavaScript let 命令一章節。

(2).const可以參閱JavaScript const 命令一章節。

兩個命令有著諸多共同點,但不在本文介紹範圍之內,僅介紹一下兩者的區別。

一.宣告資料型別不同:

let命令用於宣告變數,而const用於宣告常量。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let webName = "螞蟻部落";
console.log(webName);
webName="百度";
console.log(webName);

程式碼執行效果截圖如下:

螞蟻部落演示

let用於宣告變數,既然是變數,那麼它的值就可以改變,程式碼執行也體現了這一點。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
const webName = "螞蟻部落";
console.log(webName);
webName="百度";
console.log(webName);

程式碼執行效果截圖如下:

螞蟻部落演示

上述程式碼報錯了,因為常量賦值後,它的值不能夠被改變。

二.賦值時機:

let可以宣告變數與給變數賦值分開。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let webName;
webName="螞蟻部落";
console.log(webName);

程式碼執行效果截圖如下:

螞蟻部落演示

上面的使用方式完全沒有問題。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
const webName;
webName="螞蟻部落";
console.log(webName);

程式碼執行效果截圖如下:

螞蟻部落演示

使用const宣告常量的時候必須同時賦值,否則報錯。

三.const常量值不能改變深入介紹:

不少朋友並不認同const常量值不能改變這一理論。

可能會給出如下類似的證據,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let web={
  url:"http://www.softwhy.com",
  address:"青島市南區"
}
const antzone=web;
web.age=6;
console.log(antzone);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/14/222341ln0fktizfgg9ghtk.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼中,常量antzone的值是web物件,然後我們為物件新增一個age屬性。

也就是常量的值已經被修改,但是程式碼執行完全沒有問題。

但是上面的結論是的,常量的值並沒有改變。

web是一個值型別資料,但是web實際儲存的內容是物件在記憶體中的地址。

圖示如下:

螞蟻部落演示

web實際儲存的是一個地址,此地址就是物件在堆記憶體中的實際儲存位置。

所以儘管你給物件新增了一個屬性,但是在棧記憶體中儲存的地址沒有發生改變。

又由於常量儲存的是物件地址,自然常量值沒有發生改變。

關於值型別資料可以參閱JavaScript值型別和引用型別一章節。

相關文章