对象的特性-禁止对象扩展
<!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: trueobj1.firstName = '刘能';// 可以遍历已有属性,enumerable: truefor (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: falseobj1.firstName = '刘能';// 可以遍历已有属性,enumerable: truefor (var key in obj1) {console.log(key)}// 被冻结对象的特点:// 1. 不可扩展新属性// 2. 不能删除已有属性// 3. 不可修改已有属性// 4. 可以遍历已有属性console.log(obj1)</script></body></html>