zoukankan      html  css  js  c++  java
  • ES6-11学习笔记--const

    新声明方式:const
    1、不属于顶层对象 window
    2、不允许重复声明
    3、不存在变量提升
    4、暂时性死区
    5、块级作用域
     
    以上特性跟let声明一样,特性可看 let 的学习笔记:链接跳转
     
    ES5里面定义常量:
    Object.defineProperty(window, "PI", {
      value: 3.14,
      writable: false,
    });
    console.log(PI);
    PI = 5;
    console.log(PI);
    

      

    const定义常量:
    const a = 5; // const定义时就必须赋值
    
    // 如果如下分行定义会报错
    const b;
    b=6; // Uncaught TypeError: Assignment to constant variable.
    

      

    const 定义的常量是让栈内存空间值不变,
    由于引用类型在定义的时候栈内存保存的是堆内存引用地址,
    改变引用类型里面的值只会改变堆内存,并不会改变栈内存引用地址,
    所以引用类型使用const进行定义可改变里面的值。
    const obj = {
      name: "张三",
      age: 18,
    };
    console.log(obj);
    obj.school = "清华";
    console.log(obj);
    

      

    如何定义引用类型为常量不可修改,
    可以使用Object.freeze方法对对象进行冻结。
    注意,freeze里面只能传入对象,不能传入数组。
    const obj2 = {
      name: "李四",
      age: 20,
    };
    console.log(obj2);
    Object.freeze(obj2);
    obj2.school = "清华";
    console.log(obj2);
    

      

    注意:freeze只能进行浅层的对象冻结

    const obj3 = {
      name: "王五",
      age: 20,
      skill: {
        name: "code",
        year: 11,
      },
    };
    Object.freeze(obj3);
    obj3.school = "清华";
    obj3.skill.year = 20;
    console.log(obj3);
    

      如果想冻结对象里面的对象,那么要单独对对象里面的对象进行使用freeze冻结

     
     
    放弃安逸,持续努力——成长
  • 相关阅读:
    实现对象属性的lazy-loading(延迟加载)
    Scikit-Learn机器学习入门
    实现后门程序以及相应的rootkits,实现对后门程序的隐藏
    关于iptables命令
    基于netfilter和LVM的密码窃取
    实验一:网络嗅探器
    实验二:ICMP重定向攻击
    第八节课、第九节
    第六、七课
    python读取excel文件
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/14821315.html
Copyright © 2011-2022 走看看