根据MDN,在使用Object.defineProperty()
时,其第三个参数是带有一些可选键的描述符,例如
configurable
当且仅当此属性描述符的类型可以更改并且该属性可以从相应对象中删除时,才返回true。 默认为false。
enumerable
当且仅当在枚举相应对象的属性时显示此属性时,才返回true。 默认为false。
...
我想问一下默认为false 是什么意思?
我认为这意味着如果我不指定该键的值,它将被设置为默认值false
,但是当我在Chrome中尝试时,结果如下:
Object.getOwnPropertyDescriptor(o, 'a')
> {value: "c", writable: false, enumerable: true, configurable: true}
Object.defineProperty(o, 'a', {'enumerable': false})
> {a: "c"}
Object.getOwnPropertyDescriptor(o, 'a')
> {value: "c", writable: false, enumerable: false, configurable: true}
显然我的描述符缺少键configurable
,但是此属性未设置为false
。
感谢您的帮助!
答案 0 :(得分:0)
引用相同的MDN文章:
属性已经存在时,Object.defineProperty()会尝试根据描述符中的值和对象的当前配置来修改属性。
由于o.a
已经存在,因此Object.defineProperty()
使用提供的描述符修改属性,而不是从头开始定义它。在这种情况下,它只会覆盖您提供的密钥。
您可以通过定义新属性来查看默认设置。
var o = {}
> undefined
Object.defineProperty(o, 'a', {})
> {a: undefined}
Object.getOwnPropertyDescriptor(o, 'a')
> {value: undefined, writable: false, enumerable: false, configurable: false}