在 Javascript 中使用只读或不可变对象

在 Javascript 中,我们可以使用 const 关键字来定义原始类型的常量。

const x = 10;
x = 20;
// Uncaught TypeError: Assignment to constant variable.

但是如果想使用它来创建一个“常量对象”,但是我们仍然可以修改该对象的值。

const dog = {
    color: "brown", 
    name: "Spike"
}
dog.color = "red";

我们甚至可以添加或删除对象的属性:

dog.age = 5;
delete dog.name;
// the "const" object is now modified to 
// dog = {
//  color: "brown", 
//  age: 5
// }

那么,有没有办法在 Javascript 中创建只读对象?当然可以,我们可以通过使用以下方法来做到这一点。

Object.preventExtensions() - 防止向对象添加新属性

Object.preventExtensions(dog);
dog.age= 5;
// can't add the new prop age

但是您仍然可以删除对象的属性。另外,请注意 Object.isExtensible() 可以检查我们是否可以向对象添加新属性。

Object.isExtensible(dog); 

Object.seal() - 防止向对象添加和删除属性

Object.seal(dog);
dog.age= 5;
// can't add the new age prop
delete dog.name;
// can't delete the name prop

使用 Seal() 您仍然可以更改属性的值。Object.isSealed() 可以检查我们是否可以从对象中添加或删除属性。

Object.isSealed(dog); 

Object.freeze() - 防止对对象进行任何更改。

Object.freeze(dog);
dog.age= 5;
// can't add the new age prop
delete dog.name;
// can't delete the name prop
dog.color = "red";
// can't change the color prop

isExtensible()isSealed() 一样,Object.isFrozen() 可以检查我们是否可以添加、删除或更改对象中的任何值。

Object.isFrozen(dog); 

默认情况下,上述方法不会抛出任何错误,但如果启用了严格模式,则在尝试修改不可变对象时也会报错。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论