一直以來以ecma爲核心的js始終沒有常量的概念,es6則彌補了這一個缺陷;javascript
const foo='foo'; foo='bar';//TypeError: Assignment to constant variable.
上例聲明瞭一個基本類型的常量,如過試圖修改初始值則會報錯;若是是引用類型的值一樣適用,可是有一點須要注意,舉例說明:java
const foo=[]; foo=[1];//Assignment to constant variable.
正常報錯,沒毛病,再看:es6
const foo=[1,2,3]; foo[1]=4; console.log(foo)//[1, 4, 3]
這怎麼沒報錯?並且還能修改爲功? 這兩個例子不同的地方在於前者是修改了指針(需熟悉js 引用類型)對應的內容改變了,後者則不是指向依然沒變 可是指向對象的內容發生改變了,對於foo而言我只是一個指針負責指向對應的對象 至於對象內容是什麼就無論個人事了因此能夠修改;若是不想讓內容也改變也行使用另外一個方法;指針
const foo=Object.freeze([1,2,3]); foo[1]=4; console.log(foo)//[1, 2, 3]
這樣就不用擔憂被修改了;對象