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()
The 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("Kiwi");
自己尝试 »
JavaScript Object.isExtensible()
您可以使用 Object.isExtensible()
检查对象是否可扩展。
The 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()
The Object.seal()
方法阻止添加或删除新属性。
The Object.seal()
方法使现有属性不可配置。
The Object.isSealed()
方法可用于检查对象是否已密封。
注意
The 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("Kiwi");
自己尝试 »
JavaScript Object.isSealed()
The Object.isSealed()
方法可用于检查对象是否已密封。
The 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()
The Object.freeze()
方法阻止对对象的任何更改。
冻结的对象是只读的。
不允许修改、添加或删除属性。
注意
The 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("Kiwi");
自己尝试 »
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);
自己尝试 »