mdn Object.keys()定义它将返回给定对象自己的可枚举属性的数组。
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']
然后我使用Object.create()
来包装它,它将返回['medium']
var us2 = Object.create({}, USComicPublishers)
console.log(us2)
// return ['medium']
Object literal
中的Object.create()
行为有不同吗?
var USComicPublishers = {
countryOfOrigin : {
value : "USA",
enumerable: false,
writable: false,
configurable: false
},
medium : {
value : "comic books",
enumerable: true,
writable: false,
configurable: false
}
}
console.log(Object.keys(USComicPublishers))
var us2 = Object.create({}, USComicPublishers)
console.log(Object.keys(us2))
console.log(Object.getOwnPropertyNames(us2))

答案 0 :(得分:3)
给定一个对象字面值 - { foo: bar }
- bar
属性值。这是简单而简单的价值。它没有正确确定关于的任何内容(例如它是否可枚举)。
传递给Object.create
时,该值将作为属性描述。这确定了属性是否可枚举等。
答案 1 :(得分:3)
是的,有区别。创建对象文字时,无法像这样设置enumerable
,writable
和configurable
属性。相反,您设置的属性设置为true
并将value
设置为您给出的值(您在第一个示例中会注意到USComicPublishers.medium
将是一个对象和USComicPublishers.medium.value === "comic books"
)
如果您想要相同的结果,则必须创建对象文字,然后使用Object.defineProperties
应用属性。
var USComicPublishersData = {
countryOfOrigin : {
value : "USA",
enumerable: false,
writable: false,
configurable: false
},
medium : {
value : "comic books",
enumerable: true,
writable: false,
configurable: false
}
}
var USComicPublishers = {};
Object.defineProperties(USComicPublishers, USComicPublishersData);
console.log(Object.keys(USComicPublishers))