一直以来以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]
这样就不用担忧被修改了;对象