區(qū)別:1、let聲明的是變量,其值和類型都可以改變,而const聲明的是常量,不可以改變,不能重新賦值;2、let變量,聲明后可以不初始化,而const常量,一旦聲明,就必須立即初始化;3、const總是指向一個固定的地址,而let不固定。
本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。
let和const是在es6中新引入了兩種方式來申明變量的關鍵字,雖然我們仍然可以使用廣為傳誦的var變量,但是現在我們有了兩種更牛的工具去使用:let和const。
es6中l(wèi)et和const的區(qū)別
① let聲明的是變量,其值和類型都可以改變;const聲明的是常量,其值和類型都不可以改變。
② let變量,聲明后可以不初始化,而const常量,一旦聲明,就必須立即初始化,不能以后再賦值。
const i ; // 報錯,一旦聲明,就必須立即初始化 const j = 5; j = 10; // 報錯,常量不可以改變
③ const總是指向一個固定的地址,而let不固定
const foo = {}; // 為 foo 添加一個屬性,可以成功 foo.prop = 123; foo.prop // 123 // 將 foo 指向另一個對象,就會報錯 foo = {}; // TypeError: "foo" is read-only
上面代碼中,常量foo儲存的是一個地址,這個地址指向一個對象。不可變的只是這個地址,即不能把foo指向另一個地址,但對象本身是可變的,所以依然可以為其添加新屬性。
說明:
數組和對象等復合類型的變量,變量名不指向數據,而是指向數據所在的地址。const只保證變量名指向的地址不變,并不保證該地址的數據不變,所以將一個復合類型的變量聲明為常量必須非常小心。
const arr = []; // 報錯,[1,2,3]與[]不是同一個地址 arr = [1,2,3]; const arr = []; // 不報錯,變量名arr指向的地址不變,只是數據改變 arr[0] = 1; arr[1] = 2; arr[2] = 3; console.log(arr.length); // 輸出:3
es6中l(wèi)et和const的相同點:
① 只在聲明所在的塊級作用域內有效。
② 不存在聲明提升,同時存在暫時性死區(qū),只能在聲明的位置后面使用。
<script type="text/javascript"> console.log(dadi); let dadi = 569; </script>
結果:會報錯
③ 不可重復聲明。
【