Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 描述符';在Object.defineProperty()中的默认值是否为?_Javascript_Node.js - Fatal编程技术网

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我误解了这些键总是存在的。你说得对,谢谢!谢谢,这完全回答了我的问题!