ES6——Day2(const命令+const对象)

    xiaoxiao2021-03-25  92

    1、const命令

    A.const命令——概念

       (1)定义:对于const而言,它是用来声明变量的,但是声明的是“常量”。

       (2)性质:一旦声明,常量的值就不会改变。

    <script type="text/traceur"> const Pi=3.1415926; console.log(Pi); Pi=3; console.log(Pi); //error </script>

    解析:当多次赋值变量的情况下,会显示错误,因为const所定义的常量一旦定义就无法修改,修改即会显示错误。

    对于const命令的用法而言,它不可以重复赋值,但可以重复使用参与运算,如下:

    <script type="text/traceur"> const Pi=3.1415926; console.log(Pi); //3.1415926 console.log(5*Pi); //15.707963 </script>

    B.const命令——块级作用域

    之前接触的let定义的变量即有“块级作用域”的概念,对于const命令而言,有这个“块级作用域”的概念吗?以一个案例作为显示。

    <script type="text/traceur"> { if(false){ const Pi=3.1415926; } } console.log(Pi); </script> 结果:undefined

    解析:由于const命令定义的Pi是在块级作用域中体现的,在外部输出Pi显示“undefined”未定义的状态,即表明“const与let都具有块级作用域的概念”。

    C.const命令——暂时性死区

    <script type="text/traceur"> if(true){ console.log(Pi); //unfined; const Pi =3.1415926; }; </script> 结果:undefined

    解析:由于console.log在Pi定义之前执行,即会出现暂时性死区。

    D.const命令——不可重复声明

    <script type="text/traceur"> { var a=100; const =200; console.log(a); } </script> 结果:error(显示错误)

    解析:由于在块级作用域中有const定义变量即“常量”,其他的定义就是无意义的,所以就会显示错误。

    2、const对象

    1const单一对象及错误用法

    <script type="text/traceur"> const.person={}; person.name="Zhangsan"; person.age=12; console.log(person.name); //Zhangsan console.log(person.age); //12 console.log(person); //Object{name:"Zhangsan",age:12} </script> 在上述const案例中,首先依次输出person对象的属性:name、age,其次输出了person整个对象。

        注意:由于const命令是指向变量所在的地址,所以将变量命名为一个“常量”,就很容易出错。

    <script type="text/traceur"> const.person={}; person.name="Zhangsan"; person.age=12; console.log(person.name); console.log(person.age); console.log(person); person = {}; </script> 上述代码多了一个“person={}”,即会显示错误“person is read-only”,表示person对象是“只读”的,由于person对象重复的赋值,显示错误。

    (2)const数组及错误用法

    <script type="text/traceur"> const arr=[]; console.log(arr); console.log(arr.length); console.log("-----"); arr.push("Hello World!"); console.log(arr); console.log(arr.length); console.log("-----"); arr.length=0; console.log(arr); console.log(arr.length); console.log("-----"); </script> 结果:Array[0] 

                  0

                  -----

                  Array[1]

                  1

                  -----

                  Array[0]

                  0

                  -----

    解析:在上述代码段中,arr.push("Hello World!");所表示的就是一个数组,对应的length即为1。

    //上述代码的错误用法 arr=["Hello Everyone!"]; 结果:“error”

    解析:由于const赋值的变量一旦定义就无法改变,当再次对const所定义的数组继续赋值时,便会显示“错误”。

    总结:对于const命令的重新赋值,不可以直接性的改变const定义的变量值,而是采用push()方法,给予变量不同的值,再输出相应的结果。

    (3)const对象冻结

    <script type="text/traceur"> const person=Object.freeze({}); person.name="Zhangsan"; person.age=12; console.log(person.name); //undefined console.log(person.age); //undefined console.log(person); //Object </script>

    解析:由于在定义person对象的时候,使用了freeze()函数,即对象冻结函数,使得person对象下边的属性name、age无法传递参数,显示“undefined”;此外,在person本身而言,还是一个对象,所以返回Object

    (3——拓展1)const对象冻结使用[只冻结了“对象”]

    <script tyoe="text/traceur"> const person=Object.freeze({ name:"Zhangsan", age:12 }); console.log(person.name); //Zhangsan console.log(person.age); //12 console.log(person); //Object </script>    解析:使用const冻结对象,只是冻结了对象,并没有冻结了对象的属性。

    若要使用const对象进行冻结时,必须把需要使用的对象的属性全部列出来,再在外边进行使用。

    (3——拓展1)const对象冻结使用[彻底冻结函数:冻结“对象+属性”]

    var constantize=(obj) => { Object.freeze(obj); //首先把自己冻结; Object.keys(obj).forEach( (key,value) => { if(typeof obj[key] === 'object'){ constantize(obj[key]); //采用递归调用 }; }); };

    转载请注明原文地址: https://ju.6miu.com/read-13701.html

    最新回复(0)