在 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 举报,一经查实,本站将立刻删除。