如何遍历 Javascript 对象的属性名?

我想从一个 Javascript 对象获得属性名来动态地构建一个表:

var obj = {'fname': 'joe', 'lname': 'smith', 'number': '34'};


for (var i = 0; i < obj.properties.length; i++) {
alert(' name=' + obj.properties[i].name + ' value=' + obj.properties[i].value);
}

会提醒:

name=fname value=joe


name=lname value=smith


name=number value=34

然后我可以用这样的对象创建一个表:

var obj = { 'players': [
{ 'fname': 'joe', 'lname': 'smith', 'number': '34'} ,
{ 'fname': 'jim', 'lname': 'Hoff', 'number': '12'} ,
{ 'fname': 'jack', 'lname': 'jones', 'number': '84'}
] };

生产:

| fname |  lname |  number |
|-------|--------|---------|
| joe   | smith  |      34 |
| jim   | Hoff   |      12 |
| jack  | jones  |      84 |

更新

多亏了这个答案,我使用头文件列表中第一个对象的属性名从 Javascript 对象生成了一个表:

    function renderData() {
var obj = { 'players': [
{ 'fname': 'joe', 'lname': 'smith', 'number': '34' },
{ 'fname': 'jim', 'lname': 'jones', 'number': '12' },
{ 'fname': 'jack', 'lname': 'Hoff', 'number': '84' }
] };


var cols = GetHeaders(obj);


$('#Output').html(CreateTable(obj, cols));
}


function CreateTable(obj, cols) {
var table = $('<table></table>');
var th = $('<tr></tr>');
for (var i = 0; i < cols.length; i++) {
th.append('<th>' + cols[i] + '</th>');
}
table.append(th);


for (var j = 0; j < obj.players.length; j++) {
var player = obj.players[j];
var tr = $('<tr></tr>');
for (var k = 0; k < cols.length; k++) {
var columnName = cols[k];
tr.append('<td>' + player[columnName] + '</td>');
}
table.append(tr);
}
return table;
}


function GetHeaders(obj) {
var cols = new Array();
var p = obj.players[0];
for (var key in p) {
//alert(' name=' + key + ' value=' + p[key]);
cols.push(key);
}
return cols;
}
160867 次浏览

使用 for...in循环:

for (var key in obj) {
console.log(' name=' + key + ' value=' + obj[key]);


// do some more stuff with obj[key]
}

在 JavaScript1.8.5中,Object.getOwnPropertyNames返回直接在给定对象上找到的所有属性的数组。

Object.getOwnPropertyNames ( obj )

以及另一个方法 Object.keys,它返回一个数组,该数组包含给定对象的所有 自己的可枚举属性的名称。

Object.keys( obj )

我使用 forEach在 obj 中列出值和键,与 for (var key in obj) ..相同

Object.keys(obj).forEach(function (key) {
console.log( key , obj[key] );
});

这些都是 ECMAScript 的新特性,方法 getOwnPropertyNameskeys不会支持旧的浏览器的。