Javascript 描述符';在Object.defineProperty()中的默认值是否为?
根据,当使用Javascript 描述符';在Object.defineProperty()中的默认值是否为?,javascript,node.js,Javascript,Node.js,根据,当使用Object.defineProperty()时,它的第三个参数是带有一些可选键的描述符,例如 可配置 当且仅当此属性描述符的类型可以更改,并且该属性可以从相应对象中删除时,为true。 默认为false。 可枚举 当且仅当此属性在相应对象上的属性枚举期间显示时,为true。 默认为false。 我想问一下上面的默认值为false是什么意思 我想这意味着如果我不指定该键的值,它将被设置为默认值,即false,但当我在Chrome中尝试时,结果如下: Object.getOwnPro
Object.defineProperty()
时,它的第三个参数是带有一些可选键的描述符,例如
可配置
当且仅当此属性描述符的类型可以更改,并且该属性可以从相应对象中删除时,为true。
默认为false。
可枚举
当且仅当此属性在相应对象上的属性枚举期间显示时,为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
谢谢你的帮助 引用同一篇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}
这是因为
configurable
已设置,因为该属性存在。请使用不存在的属性尝试该属性。@FelixKling此处所有合法密钥的值将在创建属性时启动(如true
),因此我认为没有任何不存在的密钥。我想知道的是何时使用这些默认值。@FelixKling我误解了这些键总是存在的。你说得对,谢谢!谢谢,这完全回答了我的问题!