ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

js冻结对象

2020-03-07 17:05:03  阅读:217  来源: 互联网

标签:冻结 obj 常量 对象 Object js ele freeze


定义一个常量,如果这个常量不是对象,那么这个常量是不可以改变的。

例如:

const  PI = 3.14
PI = 3  // 报错

但是如果这个常量是个对象,那么,这个常量的属性还是可以被修改和删除的,也可以往这个对象里添加新属性。

例如:

const obj = {
    a:'a',
    b:'b'
    }

obj.a = c 
console.log(obj.a)   // c

那么应该怎样才能方式一个常量的对象被修改了呢?此时需要一个方法

Object.freeze(obj)

被冻结的对象,不能添加属性,不能修改属性,不能删除属性,例如:

var obj = {
   a:'a',
   b:'b'  
}

Object.freeze(obj)

obj.a = 'c'
console.log(obj.a)  // 仍然是 a,不是 c

如何判断一个对象是否被冻结?那需要另外一个方法:

Object.isFrozen(obj)

例如:

var obj = {
   a:'a',
   b:'b'  
}

Object.freeze(obj)

Object.isFrozen(obj)  // true

 

如何冻结深层对象?

深层对象是这样的:

const deepObj = {
   test:{
       a:'a',
       b:'b'        
    }  
}

js没有冻结深层对象的方法,但是可以自己写一个。

  function deepFreeze(obj){
            var propertyNames = Object.getOwnPropertyNames(obj)
            propertyNames.forEach(ele=>{
                if(typeof obj[ele] === 'object' && obj[ele]!==null){
                    deepFreeze(obj[ele])
                }
            })
            return Object.freeze(obj)
         }


deepFreeze(deepObj)
Object.isFrzon(deepObj)  // true

 

标签:冻结,obj,常量,对象,Object,js,ele,freeze
来源: https://www.cnblogs.com/luguankun/p/12435337.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有