1、const声明的是常量,在声明的时候就必须赋值,否则报错
const a; #报错:missing initializer in const declaration const a=1; #正常运行
2、一旦声明常量就不可再改变;
const name = "小红” const name = "小明“ #报错:常量不能被修改
3、常量为引用类型的时候,可以修改该引用类型
const xiaoming = { age = 14; name = "xiaoming" } console.log(xiaoming); xiaoming.age = 22; console.log(xiaoming); #成功修改 xiaoming = {} #报错
原因:const的常量的value是引用类型的时候,value是引用类型的内存地址,而非实际内容;只要保证引用地址没有改变就不会报错
4、const的特性
- let声明的变量只在当前(块级)作用域内有效;
- let声明的变量不能被重复声明;
- 不存在变量提升;
4、怎么解决引用类型(对象&数组)的常量可以被修改的问题:object.freeze() #冻结引用类型,此时常量为引用类型的话,也不会再修改了
const xiaoming = { age = 14; name = "xiaoming" } xiaoming.freeze(); console.log(xiaoming); #age = 14 xiaoming.age = 22; console.log(xiaoming); #age = 14(因为被冻结,所以修改不生效)
5、ES6之前怎么声明常量
1、假装是常量: var xiaoming = "#ff0000" 在对象上添加属性: Object.defineProperty = {obj,’属性名‘,属性描述} 例如: var CST={}; Object.defineProperty = {CST, 'BASE_NAME', { value: 'xiaoming'; #属性的值 writeable:false; #属性不能被修改了 }
Object.seal(CST); #包裹常量后,常量若为引用类型的话,此时无法再扩展,但可以修改当前属性值,相当于ES6中的freeze()的一半的功能;