一直以來以ecma為核心的js始終沒有常量的概念,es6則彌補了這一個缺陷;
const foo='foo';foo='bar';//TypeError: Assignment to constant variable.
?上例聲明了一個基本類型的常量,如過試圖修改初始值則會報錯;如果是引用類型的值同樣適用,但是有一點需要注意,舉例說明:
const foo=[]; foo=[1];//Assignment to constant variable.
正常報錯,沒毛病,再看:
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]
?這樣就不用擔心被修改了;
?