对象的特性-禁止对象扩展
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var obj1 = {
firstName: '赵四',
lastName: '尼古拉斯'
};
// 检测对象是否可扩展,true 表示可扩展,false 表示不可扩展
console.log(Object.isExtensible(obj1)); // true
// 禁止对象扩展
Object.preventExtensions(obj1)
// 检测对象是否可扩展,true 表示可扩展,false 表示不可扩展
console.log(Object.isExtensible(obj1)); // false
// 为 obj1 添加新属性,此时添加不上
obj1.age = 20;
console.log(obj1)
</script>
</body>
</html>
对象的特性-封印对象
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var obj1 = {
firstName: '赵四',
lastName: '尼古拉斯'
};
// 检测对象是否可扩展,true 表示可扩展,false 表示不可扩展
// console.log(Object.isExtensible(obj1)); // true
// 检测对象是否是被封印的,true 表示已被封印,false 表示未被封印
console.log(Object.isSealed(obj1)); // false
// 封印对象
Object.seal(obj1);
// 检测对象是否是被封印的,true 表示已被封印,false 表示未被封印
console.log(Object.isSealed(obj1)); // true
// 检测对象是否可扩展,true 表示可扩展,false 表示不可扩展
console.log(Object.isExtensible(obj1)); // false
// 不可扩展
obj1.age = 20;
// 由于被封印对象的所有属性的 configurable 特性都被设置成 false,因此不能删除任何属性。
delete obj1.firstName;
// 可以修改已有属性,writable: true
obj1.firstName = '刘能';
// 可以遍历已有属性,enumerable: true
for (var key in obj1) {
console.log(key)
}
// 被封印对象的特点:
// 1. 不可扩展新属性
// 2. 不能删除已有属性
// 3. 可以修改已有属性
// 4. 可以遍历已有属性
console.log(obj1)
</script>
</body>
</html>
对象的特性-冻结对象
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var obj1 = {
firstName: '赵四',
lastName: '尼古拉斯'
};
// 检测对象是否被冻结,true 表示已被冻结,false 表示未被冻结
console.log(Object.isFrozen(obj1)); // false
// 冻结对象
Object.freeze(obj1)
// 冻结之后,再次检测对象是否被冻结
console.log(Object.isFrozen(obj1)); // true
// 冻结之后,再次检测对象是否被封印
console.log(Object.isSealed(obj1)); // true
// 冻结之后,再次检测对象是否能扩展
console.log(Object.isExtensible(obj1)); // false
// 不可扩展
obj1.age = 20;
// 由于冻结对象的所有属性的 configurable 特性都被设置成 false,因此不能删除任何属性。
delete obj1.firstName;
// 不可修改已有属性,writable: false
obj1.firstName = '刘能';
// 可以遍历已有属性,enumerable: true
for (var key in obj1) {
console.log(key)
}
// 被冻结对象的特点:
// 1. 不可扩展新属性
// 2. 不能删除已有属性
// 3. 不可修改已有属性
// 4. 可以遍历已有属性
console.log(obj1)
</script>
</body>
</html>