JavaScript Object Protection 对象保护
对象保护方法
// 防止重新赋值
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"};
// Prevent Extensions
Object.preventExtensions(person);
// 这将抛出一个错误
person.nationality = "English";亲自试一试 »由于数组也是对象,因此也可以阻止数组进行扩展:
示例
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.preventExtensions(fruits);
// 这将抛出一个错误:
fruits.push("Kiwi");亲自试一试 »JavaScript Object.isExtensible()
您可以使用Object.isExtensible()来检查对象是否可扩展。
Object.isExtensible() 如果对象可扩展,则返回 true。
示例
// 创建对象
const person = {firstName:"John", lastName:"Doe"};
// Prevent Extensions
Object.preventExtensions(person);
// 这将返回 false
let answer = Object.isExtensible(person);亲自试一试 »
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
// Prevent Extensions
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"
};
// Seal Object
Object.seal(person)
// 这将抛出一个错误
delete person.age;亲自试一试 »由于数组也是对象,因此数组也可以被密封:
示例
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.seal(fruits);
// 这将抛出一个错误:
fruits.push("Kiwi");亲自试一试 »JavaScript Object.isSealed()
Object.isSealed() 方法可用于检查对象是否被密封。
Object.isSealed() 如果对象被密封,则返回 true。
示例
// 创建对象
const person = {firstName:"John", lastName:"Doe"};
// Seal Object
Object.seal(person);
// 这将返回 true
let answer = Object.isSealed(person);亲自试一试 »
// 创建数组
const fruits = ["Banana", "Orange", "Apple", "Mango"];
// Seal Array
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("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);亲自试一试 »