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上面的兼容归纳:

ES6--const常量