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

Fai*_*een 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: function(value){ name = value; }
});
Run Code Online (Sandbox Code Playgroud)

那么我在它们上面调用for循环:

for ( var prop in obj ) {
  console.log( prop );
}
Run Code Online (Sandbox Code Playgroud)

根据我的教程,应该产生以下结果:

value
name
Run Code Online (Sandbox Code Playgroud)

但相反,它只显示价值.为什么姓名没有出现?

Phr*_*ogz 6

enumerablein 的默认值definePropertyfalse; 不可枚举的属性不会显示在for…in循环中.(这就是enumerable旗帜的重点.)如果你也加入enumerable:true你的第二个定义,它将"修复"它.

一些文档.


pra*_*eek 5

由于name属性未定义为enumerable,因此请将名称定义设置为

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

它会出现.