Javascript 为什么object.keys()到object literal和object.create()的结果不同?

Javascript 为什么object.keys()到object literal和object.create()的结果不同?,javascript,Javascript,定义它将返回给定对象自身可枚举属性的数组 var USComicPublishers = { countryOfOrigin : { value : "USA", enumerable: false, writable: false, configurable: false }, medium : { value : "comic books", enumerable: true, writable: false, config

定义它将返回给定对象自身可枚举属性的数组

var USComicPublishers = {
countryOfOrigin : {
    value  : "USA",
    enumerable: false,
    writable: false,
    configurable: false
},
medium : {
    value  : "comic books",
    enumerable: true,
    writable: false,
    configurable: false
}
}
根据Object.keys()的定义,它应该返回
['medium']

但它返回
['countryOfOrigin','medium']

var us2 = Object.create({}, USComicPublishers)
console.log(us2)
// return ['medium']
然后我使用
Object.create()
来包装它,它将返回
['medium']

var us2 = Object.create({}, USComicPublishers)
console.log(us2)
// return ['medium']
Object literal
Object.create()中是否有不同的行为

var USComicPublishers={
原产国:{
价值:“美国”,
可枚举:false,
可写:false,
可配置:false
},
中等:{
价值:“漫画书”,
可枚举:正确,
可写:false,
可配置:false
}
}
console.log(Object.key(uscomicpublisher))
var us2=Object.create({},USComicPublishers)
console.log(Object.keys(us2))

console.log(Object.getOwnPropertyNames(us2))
给定一个对象文本-
{foo:bar}
-
bar
是属性保持的值。这是简单明了的价值观。它不能正确地确定有关的任何内容(例如它是否可枚举)


当传递到
Object.create
时,该值作为属性的描述。这将确定属性是否可枚举等。

是,存在差异。创建对象文字时,无法设置类似的
可枚举
可写
可配置
属性。相反,您正在设置属性,将所有这些值设置为
true
,并将
value
设置为您给定的值(在第一个示例中,您会注意到
USComicPublishers.medium
将是一个对象,
USComicPublishers.medium.value==“漫画书”

如果希望得到相同的结果,则必须创建对象文字,然后使用应用属性

var USComicPublishersData={
原产国:{
价值:“美国”,
可枚举:false,
可写:false,
可配置:false
},
中等:{
价值:“漫画书”,
可枚举:正确,
可写:false,
可配置:false
}
}
var USComicPublishers={};
对象定义属性(USComicPublishers、USComicPublishersData);
console.log(Object.keys(USComicPublishers))