zoukankan      html  css  js  c++  java
  • ES6基础(2)-const

    1、const声明的是常量,在声明的时候就必须赋值,否则报错

    const a;   #报错:missing initializer in const declaration
    const a=1;  #正常运行

    2、一旦声明常量就不可再改变;

    const  name = "小红”
    const  name = "小明“
    #报错:常量不能被修改

    3、常量为引用类型的时候,可以修改该引用类型

    const xiaoming = {
      age = 14;
      name = "xiaoming"    
    }
    console.log(xiaoming);
    xiaoming.age = 22;
    console.log(xiaoming);   #成功修改
    xiaoming = {}        #报错
    

     原因:const的常量的value是引用类型的时候,value是引用类型的内存地址,而非实际内容;只要保证引用地址没有改变就不会报错

    4、const的特性

    • let声明的变量只在当前(块级)作用域内有效;
    • let声明的变量不能被重复声明;
    • 不存在变量提升;

    4、怎么解决引用类型(对象&数组)的常量可以被修改的问题:object.freeze()    #冻结引用类型,此时常量为引用类型的话,也不会再修改了

    const xiaoming = {
      age = 14;
      name = "xiaoming"    
    }
    xiaoming.freeze();
    console.log(xiaoming);    #age = 14
    xiaoming.age = 22;
    console.log(xiaoming);      #age = 14(因为被冻结,所以修改不生效)

    5、ES6之前怎么声明常量

    1、假装是常量:
    var xiaoming = "#ff0000"
    
    在对象上添加属性:
    Object.defineProperty = {obj,’属性名‘,属性描述}
    例如:
    var CST={};
    Object.defineProperty = {CST, 'BASE_NAME', {
        value: 'xiaoming';    #属性的值
        writeable:false;      #属性不能被修改了  
    }  
    Object.seal(CST);  #包裹常量后,常量若为引用类型的话,此时无法再扩展,但可以修改当前属性值,相当于ES6中的freeze()的一半的功能;

      

  • 相关阅读:
    PagerIndicator主题样式修改
    写个Fragment方便的抽象基类 BaseFragment
    slidingMenu有时候需要关闭侧边栏
    通过构造方法传递数据
    三层ViewPager嵌套 的事件处理
    网络缓存的逻辑
    html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    AJAX请求
    animation-name
    Sublime Text 2主要快捷键列表
  • 原文地址:https://www.cnblogs.com/shary-blue/p/13991894.html
Copyright © 2011-2022 走看看