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);
自己動手試一試 »