JavaScript 对象保护
对象保护方法
// 防止重新赋值
const car = {type:"Fiat", model:"500", color:"white"};
// 防止添加对象属性
Object.preventExtensions(object)
// 如果可以向对象添加属性,则返回 true
Object.isExtensible(object)
// 防止添加和删除对象属性
Object.seal(object)
// 如果对象已密封,则返回 true
Object.isSealed(object)
// 阻止对对象进行任何更改
Object.freeze(object)
// 如果对象已冻结,则返回 true
Object.isFrozen(object)
使用 const
保护对象不被更改的最常见方法是使用 const
关键字。
使用 const
时,您无法重新分配对象,但仍然可以更改属性的值、删除属性或创建新属性。
JavaScript Object.preventExtensions()
Object.preventExtensions()
方法可防止向对象添加属性。
示例
// 创建对象
const person = {firstName:"John", lastName:"Doe"};
// 阻止扩展
Object.preventExtensions(person);
// 这将抛出错误
person.nationality = "English";
自己动手试一试 »
由于数组也是对象,因此也可以防止数组被扩展
示例
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.preventExtensions(fruits);
// 这将抛出错误
fruits.push("奇异果");
自己动手试一试 »
JavaScript Object.isExtensible()
您可以使用 Object.isExtensible()
来检查一个对象是否可扩展。
如果对象是可扩展的,Object.isExtensible()
将返回 true。
示例
// 创建对象
const person = {firstName:"John", lastName:"Doe"};
// 阻止扩展
Object.preventExtensions(person);
// 这将返回 false
let answer = Object.isExtensible(person);
自己动手试一试 »
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
// 阻止扩展
Object.preventExtensions(fruits);
// 这将返回 false
let answer = Object.isExtensible(fruits);
自己动手试一试 »
JavaScript Object.seal()
Object.seal()
方法可防止添加或删除新属性。
Object.seal()
方法使现有属性不可配置。
可以使用 Object.isSealed()
方法来检查一个对象是否被密封。
注意
在非严格模式下,Object.seal()
方法将静默失败,而在严格模式下会抛出 TypeError。
示例
"use strict"
// 创建对象
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
// 密封对象
Object.seal(person)
// 这将抛出错误
delete person.age;
自己动手试一试 »
由于数组也是对象,因此数组也可以被密封
示例
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.seal(fruits);
// 这将抛出错误
fruits.push("奇异果");
自己动手试一试 »
JavaScript Object.isSealed()
可以使用 Object.isSealed()
方法来检查一个对象是否被密封。
如果对象被密封,Object.isSealed()
将返回 true。
示例
// 创建对象
const person = {firstName:"John", lastName:"Doe"};
// 密封对象
Object.seal(person);
// 这将返回 true
let answer = Object.isSealed(person);
自己动手试一试 »
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
// 密封数组
Object.seal(fruits);
// 这将返回 true
let answer = Object.isSealed(fruits);
自己动手试一试 »
JavaScript Object.freeze()
Object.freeze()
方法可防止对对象进行任何更改。
被冻结的对象是只读的。
不允许修改、添加或删除属性。
注意
在非严格模式下,Object.freeze()
方法将静默失败,而在严格模式下会抛出 TypeError。
示例
"use strict"
// 创建对象
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
// 冻结对象
Object.freeze(person)
// 这将抛出错误
person.age = 51;
自己动手试一试 »
由于数组也是对象,因此数组也可以被冻结
示例
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.freeze(fruits);
// 这将引发一个错误
fruits.push("奇异果");
自己动手试一试 »
JavaScript Object.isFrozen()
可以使用 Object.isFrozen()
方法来检查一个对象是否被冻结。
如果对象被冻结,Object.isFrozen()
将返回 true。
示例
// 创建对象
const person = {firstName:"John", lastName:"Doe"};
// 冻结对象
Object.freeze(person);
// 这将返回 true
let answer = Object.isFrozen(person);
自己动手试一试 »
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.freeze(fruits);
// 这将返回 true
let answer = Object.isFrozen(fruits);
自己动手试一试 »