欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6新特性-----const命令

程序员文章站 2022-07-16 22:00:58
...
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
            const声明一个只读的常量,一旦声明,常量的值就不能改变
         */
        //  const PI=3.1415;
        //  PI=3;   Assignment to constant variable.
        //const与let的作用域相同:只在声明所在的块级作用域内有效
        // if(true){
        //     const MAX=5;//MAX is not defined
        // }
        //MAX;


        //const命令声明的常量也是不提升,同样存在暂时性死区,
        //只能在声明后的位置使用
        // if(true){
        //     console.log(MAX);
        //     const MAX=5;//ReferenceError: MAX is not defined
        // }
        

        //const声明的常量不可重复声明
        /* 
           const声明变量本质:
              1.const声明变量的本质不是变量的值不得改变,
                而是变量指向的那个内存地址所保存的数据不得改动。
                对于简单类型的数据(数值、字符串、布尔值)
                值就保存在变量指向的那个内存地址,因此等同于常量
               2.但是对于复合类型的数据(主要是对象和数组),
               变量指向的内存地址,保存的只是一个指向实际数据的指针,
               const只能保证这个指针是固定的 (即总是指向另一个固定的地址)
              ,但是不能保证它指向的数据结构是不可变的,
               因此声明变量需要非常小心
         */
         const foo={};
         //为foo添加一个属性
         foo.prop=123;
         console.log(foo.prop);
         //常量foo是一个存储地址,这个地址指向一个对象,不可变的是这个地址
         //把foo指向另一个地址就会报错
         foo={}//报错

         //eg:
         const a=[];
         a.push('hello');//可执行
         a.length=0;//可执行
         a=['dave'];//报错


         //如果想将对象解冻,使用Object.freeze()
         const foo=Object.freeze({});
         //常规模式时,下面一行不起作用
         //严格模式时,改行会报错


         /* 
             ES6声明变量的六种方法:
                var function let const import class
            ES5中,顶层对象的属性与全局变量是等价的

            ES6为了改变这一点:
              一方面规定,为了保持兼容性。var命令和function
              命令声明的全局变量,依旧是顶层对象的属性
              另一方面规定,let命令、const命令、class命令
              声明的全局变量不属于顶层对象的属性

              也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩
        */


    </script>
</body>
</html>
相关标签: 阮一峰 ES6