• 理解es6中的const与“不变”


    const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。

    效果

    • 对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量
    • 对于复合类型的数据(主要是对象和数组),变量指向的内存地址,const只能保证这个指针是固定的,不能保证它指向的数据结构是不可变得
    'use strict'
    const obj = {}
    const arr = []
    obj.prop = 123  // 不改动指针
    arr.push('Hello')  // 只改变数据结构
    
    try{
        obj = {} // obj重指向新对象
    } catch (err) {
        console.log(err.message) // 失败
    }
    
    try{
        arr = []
    } catch (err) {
        console.log(err.message) // 失败
    }
    

    彻底冻结

    除了将对象本身冻结,对象的属性也应该冻结

    关于Object.freeze

    方法可以冻结一个对象。冻结对象是指那些不能添加新的属性,不能修改已有属性的值,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性的对象。

    'use strict'
    const foo = {}
    foo.prop = 1
    foo.config = {
        prop:1
    }
    
    const freeze = obj => {
        Object.freeze(obj)
        Object.keys(obj).forEach( key=>{
            if(typeof obj[key] === 'object') {
                freeze(obj[key])
            }
        })
    }
    
    freeze(foo) // 完全冻结
    try {
        foo.prop = 'test'
    } catch (err) {
        console.log(err.message)
    }
    

    欢迎技术交流,引用请注明出处。
    个人网站:godbmw.com
    Github:godbmw

  • 相关阅读:
    jenkins+maven+svn的自动化部署
    python+selenium遇到鼠标悬停不成功可以使用js进行操作
    robot framework环境搭建
    selenium+python定位元素方法
    selenium+python元素操作
    selenium+python等待时间
    selenium+python浏览器窗口的切换
    jmeter学习(七)连接mysql 数据库
    jmeter学习(六)集合点和关联
    jmeter学习(五)参数化
  • 原文地址:https://www.cnblogs.com/geyouneihan/p/9127308.html
Copyright © 2020-2023  润新知