Bảo vệ đối tượng JavaScript
Có nhiều cách khác nhau để ngăn chặn việc sửa đổi các đối tượng JavaScript:
// Prevents re-assignment
const car = {type:"Fiat", model:"500", color:"white"};
// Prevents adding object properties
Object.preventExtensions(object)
// Returns true if properties can be added to an object
Object.isExtensible(object)
// Prevents adding and deleting object properties
Object.seal(object)
// Returns true if object is sealed
Object.isSealed(object)
// Prevents any changes to an object
Object.freeze(object)
// Returns true if object is frozen
Object.isFrozen(object)
Sử dụng const
Cách phổ biến nhất để bảo vệ một đối tượng khỏi bị thay đổi là sử dụng từ khóa const
.
Với const
bạn không thể gán lại đối tượng nhưng vẫn có thể thay đổi giá trị của thuộc tính, xóa thuộc tính hoặc tạo thuộc tính mới.
Đối tượng JavaScript.preventExtensions()
Phương thức Object.preventExtensions()
ngăn việc thêm thuộc tính vào một đối tượng.
Ví dụ
// Create Object
const person = {firstName:"John", lastName:"Doe"};
// Prevent Extensions
Object.preventExtensions(person);
// This will throw an error
person.nationality = "English";
Hãy tự mình thử »Vì mảng là đối tượng nên mảng cũng có thể bị ngăn chặn khỏi phần mở rộng:
Ví dụ
// Create Array
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.preventExtensions(fruits);
// This will throw an error:
fruits.push("Kiwi");
Hãy tự mình thử »Đối tượng JavaScript.isExtensible()
Bạn có thể sử dụng Object.isExtensible()
để kiểm tra xem một đối tượng có thể mở rộng được hay không.
Object.isExtensible()
trả về true nếu một đối tượng có thể mở rộng được.
Ví dụ
// Create Object
const person = {firstName:"John", lastName:"Doe"};
// Prevent Extensions
Object.preventExtensions(person);
// This will return false
let answer = Object.isExtensible(person);
Hãy tự mình thử »
// Create Array
const fruits = ["Banana", "Orange", "Apple", "Mango"];
// Prevent Extensions
Object.preventExtensions(fruits);
// This will return false
let answer = Object.isExtensible(fruits);
Hãy tự mình thử »Đối tượng JavaScript.seal()
Phương thức Object.seal()
ngăn việc thêm hoặc xóa các thuộc tính mới.
Phương thức Object.seal()
làm cho các thuộc tính hiện có không thể cấu hình được.
Phương thức Object.isSealed()
có thể được sử dụng để kiểm tra xem một đối tượng có được niêm phong hay không.
Ghi chú
Phương thức Object.seal()
sẽ tự động thất bại ở chế độ không nghiêm ngặt và ném ra TypeError ở chế độ nghiêm ngặt.
Ví dụ
"use strict"
// Create Object
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
// Seal Object
Object.seal(person)
// This will throw an error
delete person.age;
Hãy tự mình thử »Vì mảng là đối tượng nên mảng cũng có thể được niêm phong:
Ví dụ
// Create Array
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.seal(fruits);
// This will throw an error:
fruits.push("Kiwi");
Hãy tự mình thử »Đối tượng JavaScript.isSealed()
Phương thức Object.isSealed()
có thể được sử dụng để kiểm tra xem một đối tượng có được niêm phong hay không.
Object.isSealed()
trả về true nếu một đối tượng bị niêm phong.
Ví dụ
// Create Object
const person = {firstName:"John", lastName:"Doe"};
// Seal Object
Object.seal(person);
// This will return true
let answer = Object.isSealed(person);
Hãy tự mình thử »
// Create Array
const fruits = ["Banana", "Orange", "Apple", "Mango"];
// Seal Array
Object.seal(fruits);
// This will return true
let answer = Object.isSealed(fruits);
Hãy tự mình thử »Đối tượng JavaScript.freeze()
Phương thức Object.freeze()
ngăn chặn mọi thay đổi đối với một đối tượng.
Các đối tượng đông lạnh chỉ có thể đọc.
Không được phép sửa đổi, bổ sung hoặc xóa các thuộc tính.
Ghi chú
Phương thức Object.freeze()
sẽ âm thầm thất bại ở chế độ không nghiêm ngặt và ném TypeError ở chế độ nghiêm ngặt.
Ví dụ
"use strict"
// Create Object
const person = {
firstName: "John",
lastName: "Doe",
age: 50,
eyeColor: "blue"
};
// Freeze Object
Object.freeze(person)
// This will throw an error
person.age = 51;
Hãy tự mình thử »Vì mảng là đối tượng nên mảng cũng có thể được cố định:
Ví dụ
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.freeze(fruits);
// This will trow an error:
fruits.push("Kiwi");
Hãy tự mình thử »Đối tượng JavaScript.isFrozen()
Phương thức Object.isFrozen()
có thể được sử dụng để kiểm tra xem một đối tượng có bị đóng băng hay không.
Object.isFrozen()
trả về true nếu một đối tượng bị đóng băng.
Ví dụ
// Create Object
const person = {firstName:"John", lastName:"Doe"};
// Freeze Object
Object.freeze(person);
// This will return true
let answer = Object.isFrozen(person);
Hãy tự mình thử »
// Create Array
const fruits = ["Banana", "Orange", "Apple", "Mango"];
Object.freeze(fruits);
// This will return true:
let answer = Object.isFrozen(fruits);
Hãy tự mình thử »