在javascript中创建不可变对象

时间:2017-10-20 16:20:19

标签: javascript immutability

我有一个例程,我从api收到一些数据。我想将这些数据存储在一个对象中,但之后我想“锁定”这个对象,并且在该点之后不允许对属性或它们的值进行任何更改。那可能吗? (如果可能,仅使用ES5)。

3 个答案:

答案 0 :(得分:13)

如果您希望无法修改对象,可以使用Object.freeze

  

Object.freeze()方法冻结一个对象:即阻止新对象   属性被添加到它;防止现有属性   被删除;并防止现有的属性,或他们的   可变性,可配置性或可写性,不被改变,它   还可以防止原型被更改。该方法返回   处于冻结状态的物体。

如果您只想阻止重新分配变量,可以使用const(ES6),但请注意:

  

const声明创建对值的只读引用。它   并不意味着它拥有的值是不可变的,只是变量   标识符无法重新分配。

例如,以下内容完全有效



const a = { x: 7 }
a.x = 9
console.log(a.x) // 9




但是,尝试重新分配使用const声明的变量会抛出TypeError



const a = 5
a = 7




答案 1 :(得分:3)

对于Immutable对象,我们可以在approches下面使用

  1. Object.freeze()
  2. 在更新对象时强制实施对象不变性,请务必
  3. 使用Object.assign({},a,{foo:'bar'})而不是a.foo='bar'
  4. 我们可以使用spread(...)运算符。
  5. 参见示例:

    var person={name:'pavan',age:26}
    
    var newPerson={...person,name:'raju'}
    
    console.log(newPerson ===person) //false
    console.log(person)  //{name:'pavan',age:26}
    console.log(newPerson)  //{name:'raju',age:26}
    

答案 2 :(得分:1)

没有。没有好办法强制执行const - 这是ES5。