为什么我的for循环不能处理我的Javascript属性?

为什么我的for循环不能处理我的Javascript属性?,javascript,ecmascript-5,Javascript,Ecmascript 5,我创建了此对象及其属性: var obj = {}; Object.defineProperty( obj, "value", { value: true, writable: false, enumerable: true, configurable: true }); var name = "John"; Object.defineProperty( obj, "name", { get: function(){ return name; }, set: fun

我创建了此对象及其属性:

var obj = {};

Object.defineProperty( obj, "value", {
  value: true,
  writable: false,
  enumerable: true,
  configurable: true
});

var name = "John";

Object.defineProperty( obj, "name", {
  get: function(){ return name; },
  set: function(value){ name = value; }
});
然后我对它们调用for循环:

for ( var prop in obj ) {
  console.log( prop );
}
根据我的教程,应该会产生以下结果:

value
name

但它只显示价值。为什么名字没有出现

defineProperty
enumerable
的默认值为
false
;不可枚举的属性不会显示在循环中…的
中。(这就是
enumerable
标志的要点。)如果您将
enumerable:true
添加到第二个定义中,它将“修复”它


请参阅。

因为名称属性未定义为可枚举,请将名称定义设置为

Object.defineProperty( obj, "name", {
  enumerable: true,
  get: function(){ return name; },
  set: function(value){ name = value; }
});

它会出现的

请接受解决您问题的答案之一。这有助于其他用户将来遇到此问题时……)