我有一个例程,我从api收到一些数据。我想将这些数据存储在一个对象中,但之后我想“锁定”这个对象,并且在该点之后不允许对属性或它们的值进行任何更改。那可能吗? (如果可能,仅使用ES5)。
答案 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下面使用
Object.freeze()
Object.assign({},a,{foo:'bar'})
而不是a.foo='bar'
spread(...)
运算符。 参见示例:
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。