面试题答案
一键面试let obj = {};
Object.defineProperty(obj, 'name', {
value: 'defaultName',
enumerable: true,
writable: false,
configurable: true
});
这种设置下,属性name
可枚举意味着在使用for...in
循环或Object.keys()
等方法时,name
属性会被包含。不可写意味着不能直接通过obj.name = newName
来修改其值。
关于对象的可扩展性,由于configurable
默认是false
,如果没有显式设置为true
,则不能使用delete
删除该属性,也不能再次通过Object.defineProperty
修改除writable
和value
之外的其他特性(如果writable
为false
,value
也不能修改)。这在一定程度上限制了对象结构的随意变动,增强了对象属性设置的稳定性。如果configurable
为true
,则可以进行上述操作,对象的扩展性相对更高。