ES6--const常量
ES5中定义常量
在es6之前,常量定义的方法就是定义一个只读的对象,运用Object.defineProperty(Obj, prop, descriptor);
Obj -- 要把这个对象挂在哪,比如window就是挂在window,document就是挂在document下,
分别通过 window.prop,document.prop引用。
prop--对象名。
descriptor--对这个对象的属性的配置。
所以在ES5的时候,我们定义一个常量,可以这样:
Object.defineProperty(window, "PI", {
value: 3.1415926,
writable: false,
});
这样就算你使用window.PI = 1111也不会生效。
ES6定义常量
ES6中我们有了const这个关键字定义常量:
const MY_NAME = "quinn";
下面有几个需要注意的点:
1. const定义的常量不会挂载在window下,比如:
console.log( MY_NAME);//quinn
console.log(window.MY_NAME);//undefined
所以,因为它没有挂载点,你const对象的时候,必须声明的同时初始化,即:
const xx = yy必须都有,不能只const xx以后再赋值yy,将报错:
const xx ;// Missing initializer in const declaration
2. 使用const声明了常量,再赋值会报错:
const MY_NAME = "quinn";
MY_NAME = "UR FATHER";//Assignment to constant variable.
var MY_NAME = "ttt";//Identifier 'MY_NAME' has already been declared
let MY_NAME = "ttt";//Identifier 'MY_NAME' has already been declared
3. 常量为对象:const obj = {"NAME_1": "QUINN"};
obj = {"NAME_2": "QUINN" };//Assignment to constant variable.
obj = {"NAME_1": "QUINN"};//Assignment to constant variable.
但是可以改变属性:obj.NAME_1 = "FATHER";
4. 常量为数组时,可以先定义一个空数组:
const _AYYAY = [];
_ARRAY.push('a');//["a"]
const _ARRAY = ['b'];//Identifier '_AYYAY' has already been declared
综上,当const对象或者数组的时候,可以操作属性,但是不能重新const。
最后,附上MDN上面的兼容归纳: