我是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
正如我从输出中看到的那样,只打印属性名称而不打印它的值。 请纠正我这有什么问题?
答案 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的更多信息。