const声明一个只读的常量。一旦声明,常量的值就不能改变。
1.const和let一样只在当前代码块有效,且不能重复声明
2.作用域不会被提升
3.声明的常量必须被赋值
而let和const都是在声明所在的块级作用域内有效,let声明的变量可以改变,值和类型都可以改变,而const声明的变量一开始就需要初始化,不能留在后面在赋值。
理论来说const声明的变量的值不得改动,意思其实是变量指向的那个内存地址所保存的数据不得改动,上面代码中,常量zs储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把zs指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性,最后将 zs 指向另一个对象,就会报错TypeError: Assignment to constant variable.
如果想让定义的对象或数组的内部数据也不能够修改和改变,可以使用object.freeze(names)进行冻结,这样为对象添加新属性就不起作用。