1.
1 //只读常量,一旦声明,常量的值就不能改变。 2 const PI=3.1415; 3 console.log(PI); 4 PI=6;//报错:es6.html:186 Uncaught TypeError: Assignment to constant variable.在恒定的变量分配 5 6 const foo;//报错:es6.html:190 Uncaught SyntaxError: Missing initializer in const declaration常量声明中缺少初始化器。const一旦声明变量,就必须立即初始化,不能留到以后赋值。
2.
1 //const的作用域与let命令相同:只在声明所在的块级作用域内有效。 2 //与let一样,也存在暂时性死区,只能在声明语句后使用。 3 //与let一样,不可重复声明。 4 if(true){ 5 const MAX=99 6 console.log(MAX);//99 7 } 8 console.log(MAX);//es6.html:196 Uncaught ReferenceError: MAX is not defined
3.
1 //const声明常量的本质:const实际上保证的是变量指向的那个内存地址不得改动。对于简单类型的数据(数值 ,字符串,布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。 2 //对于复合型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,但是不能保证它指向的数据结构是固定的。 3 const foo={}; 4 5 //为foo添加属性,可以成功。 6 foo.prop=123; 7 console.log(foo.prop);//123 8 9 foo={};//报错:es6.html:209 Uncaught TypeError: Assignment to constant variable. 10 11 12 13 const a=[]; 14 a.push('hello');//["hello"] 15 console.log(a); 16 a.length=0; 17 console.log(a.length);//0 18 console.log(a);//[] 19 a=["Dave"];//Uncaught TypeError: Assignment to constant variable. 20 21 //使用Object.freeze将对象冻结, 22 const foo=Object.freeze({}); 23 // 常规模式时,下面一行不起作用; 24 // 严格模式时,该行会报错 25 foo.prop=123;//报错:Uncaught TypeError: Cannot add property prop, object is not extensible