Javascript `Object.defineProperty(exports,';uu-esModule';{value:true})`vs`exports.u-esModule=true`

Javascript `Object.defineProperty(exports,';uu-esModule';{value:true})`vs`exports.u-esModule=true`,javascript,ecmascript-6,es6-modules,umd,Javascript,Ecmascript 6,Es6 Modules,Umd,我认为: Object.defineProperty(导出,'.\u esModule',{value:true}) 应给出与此相同的结果: exports.\uu esModule=true 但我见过的所有UMD捆绑包生成器都使用了第一个选项。有什么原因吗?对象。defineProperty()的默认值与正常分配属性不同。具体而言,如果未指定以下属性,则它们都默认为false: configurable enumerable writable 因此,Object.defineProper

我认为:

Object.defineProperty(导出,'.\u esModule',{value:true})
应给出与此相同的结果:

exports.\uu esModule=true

但我见过的所有UMD捆绑包生成器都使用了第一个选项。有什么原因吗?

对象。defineProperty()
的默认值与正常分配属性不同。具体而言,如果未指定以下属性,则它们都默认为
false

configurable
enumerable
writable
因此,
Object.defineProperty(exports,'.\u esModule',{value:true})
将具有相同的值,但不可配置、可枚举或可写,而
exports.\u esModule=true
将所有这些属性默认为
true

您可以在
Object.definePropert()
上阅读有关此级别的详细信息

但我见过的所有UMD捆绑包生成器都使用了第一个选项。有什么原因吗


据推测,这些工具的设计者希望配置该属性,以便它不能被更改(可写)、删除(可配置)或枚举。

对象。defineProperty()
具有不同于正常分配属性的默认值。具体而言,如果未指定以下属性,则它们都默认为
false

configurable
enumerable
writable
因此,
Object.defineProperty(exports,'.\u esModule',{value:true})
将具有相同的值,但不可配置、可枚举或可写,而
exports.\u esModule=true
将所有这些属性默认为
true

您可以在
Object.definePropert()
上阅读有关此级别的详细信息

但我见过的所有UMD捆绑包生成器都使用了第一个选项。有什么原因吗


据推测,这些工具的设计者希望配置该属性,使其不能被更改(可写)、删除(可配置)或枚举。

区别在于第一个工具创建了一个不可枚举的属性。我想这是主要原因。@FelixKling啊,这使sense@Bergi这个问题不是重复的。问题是关于ES模块使用
Object.defineProperty
的选择,这是一个非常具体的用例。区别在于第一个用例创建了一个不可枚举的属性。我想这是主要原因。@FelixKling啊,这使sense@Bergi这个问题不是重复的。问题是关于ES模块使用
Object.defineProperty
的选择,这是一个非常具体的用例。嗯,我一直认为默认情况下是可写的。。。直到。嗯,我一直认为默认情况下可写是正确的。。。直到。