在for循环中打印对象的属性值

时间:2014-06-20 12:43:46

标签: javascript

我是JavaScript的新手,现在正在学习。 我使用for / in来打印属性和对象的每个属性的值。 但我只能打印属性而不能打印属性值。

代码段:

var obj = {x:1,y:2,z:3}
var disp_obj = function(obj){ for(p in obj) console.log(p, obj.p) }
disp_obj(obj)

输出是: x undefined y undefined z undefined

正如我从输出中看到的那样,只打印属性名称而不打印它的值。 请纠正我这有什么问题?

3 个答案:

答案 0 :(得分:3)

在对象引用后使用.p时,它不会使用变量p来评估它,它将始终获得名为"p"的预言。

使用括号语法使用字符串访问属性:

console.log(p, obj[p]);

答案 1 :(得分:1)

如果要使用变量的值来访问对象的属性,则必须使用括号表示法,而不是点符号:

var dispObj = function(o)
{
    for (var p in o)
        console.log(p, o[p]);
};

不过感到厌倦:您的dispObj会创建一个全局变量p,因为您省略了var关键字。同时尝试严格的编码标准,JS功能是camelCased 通常,简单的for...in循环执行得很好,但在某些情况下,您最终可能会记录从原型链中逐渐减少的属性。然后,建议您确保仅记录该对象的属性:

for (var p in o)
    if (o.hasOwnProperty(p))
        console.log(p, o[p]);

答案 2 :(得分:0)

更改

var disp_obj = function(obj){ for(p in obj) console.log(p, obj.p) }

var disp_obj = function(obj){ for(var p in obj) console.log(p, obj[p]) }

有关括号访问表示法here的更多信息。