cosnt是es6中常量的声明方式,声明方法和var、let声明方式一样,但是有点不同的是,const声明方式必须立即初始化变量,并且也不能在后面改变他的值
const foo; // SyntaxError: Missing initializer in const declaration复制代码
下面这个改变值也会报错
const foo = 1;foo = 2; // TypeError: Assignment to constant variable复制代码
常量也是块级作用域,以下演示
function func() { if (true) { const tmp = 123; } console.log(tmp); // Uncaught ReferenceError: tmp is not defined}func();复制代码
总是说const申明的常量是不可变的,并不意味着是不管怎样都不能改变 其实在js中基本数据类型==Undefined、Null、Boolean、Number 和String==
用const声明方式的值是不能改变的,但是如果的引用类型,如对象,那里面的值是可以改变的const foo = {};foo['prop'] = "Moo"; // This works!console.log(foo);复制代码
如果想要foo不会被改变,可以使用Object.freeze(obj) 当我们冻结一个对象的值的时候,这个对象我们不能改变,不能添加值和改变属性,例下所示:
const foo = Object.freeze({});foo.prop = 123;console.log(foo.prop) // undefined复制代码
上面这样使用不会报错,但是在严格模式下"use strict",那就不一样了
"use strict";const foo = Object.freeze({});foo.prop = 123; // SyntaxError: Cannot add property prop, object is not extensible复制代码
总结
const的一个重要点是变量是不可变的,而不是变量指向的值。所在在对象中是改变它的属性值的,如果想要它不可变,可以在"use strict"使用Object.freeze(…)