我如何枚举一个JavaScript对象的属性?

我实际上想列出所有已定义的变量及其值,但我已经了解到,定义变量实际上创建了窗口对象的属性。


当前回答

下面是如何枚举一个对象的属性:

var params = { name: 'myname', age: 'myage' }

for (var key in params) {
  alert(key + "=" + params[key]);
}

其他回答

已经被提出过几次的标准方法是:

for (var name in myObject) {
  alert(name);
}

然而,ie6、ie7和ie8在JavaScript解释器中有一个错误,导致一些键没有被枚举。如果你运行这段代码:

var obj = { toString: 12};
for (var name in obj) {
  alert(name);
}

If将在除IE以外的所有浏览器中提醒“12”。IE会忽略这个键。受影响的键值为:

isPrototypeOf hasOwnProperty toLocaleString toString 返回对象的值

为了在IE中真正的安全,你必须使用如下的东西:

for (var key in myObject) {
  alert(key);
}

var shadowedKeys = [
  "isPrototypeOf",
  "hasOwnProperty",
  "toLocaleString",
  "toString",
  "valueOf"
];
for (var i=0, a=shadowedKeys, l=a.length; i<l; i++) {
  if map.hasOwnProperty(a[i])) {
    alert(a[i]);
  }
}

好消息是EcmaScript 5定义了object .keys(myObject)函数,它以数组的形式返回对象的键,一些浏览器(例如Safari 4)已经实现了它。

for (prop in obj) {
    alert(prop + ' = ' + obj[prop]);
}

如果你使用的是Underscore.js库,你可以使用函数键:

_.keys({one : 1, two : 2, three : 3});
=> ["one", "two", "three"]

如果您试图枚举属性以便针对对象编写新代码,我建议使用像Firebug这样的调试器来可视化地查看它们。

另一种方便的技术是使用Prototype的object . tojson()将对象序列化为JSON,这将显示属性名和值。

var data = {name: 'Violet', occupation: 'character', age: 25, pets: ['frog', 'rabbit']};
Object.toJSON(data);
//-> '{"name": "Violet", "occupation": "character", "age": 25, "pets": ["frog","rabbit"]}'

http://www.prototypejs.org/api/object/tojson

下面是如何枚举一个对象的属性:

var params = { name: 'myname', age: 'myage' }

for (var key in params) {
  alert(key + "=" + params[key]);
}