Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 打印for循环中对象的特性值_Javascript - Fatal编程技术网

Javascript 打印for循环中对象的特性值

Javascript 打印for循环中对象的特性值,javascript,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未定义 y未定义 z未定义 正如我从输出中看到的,只打印属性名称,而不打印其值。 请纠正我这有什么问题?更改 var disp_o

我是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未定义 y未定义 z未定义

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

更改

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


有关括号访问表示法的详细信息。

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

var dispObj = function(o)
{
    for (var p in o)
        console.log(p, o[p]);
};
不过,请感到厌倦:您的dispObj创建了一个全局变量p,因为您省略了var关键字。此外,还尝试严格遵守编码标准,JS函数采用了CAMELCASE。 一般来说,您的SimpleFor…In循环将执行得很好,但在某些情况下,您可能会记录从原型链中滴下的属性。因此,建议确保只记录该对象的属性:

for (var p in o)
    if (o.hasOwnProperty(p))
        console.log(p, o[p]);
当您在对象引用之后使用.p时,它不会使用变量p来计算它,它将始终获得名为p的属性

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

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

使用obj[p]而不是obj.p,因为在后一种情况下,它被视为裸字而不是下标。obj.p意味着获取obj的属性p。您需要的是obj[p],这意味着获取存储在obj的变量p中的名称的属性。好的,得到了。因此,如果对象“obj”有一个名为“p”的属性,它就会打印出来。谢谢,我还可以问一下为什么需要“var p”,for中的唯一“p”就足够了吗?不声明变量会使其全局化,或者在外部范围中删除一个变量,这是导致错误的主要原因。假设您正在从循环调用另一个同样使用p的函数,并将其声明为全局函数?
console.log(p, obj[p]);