Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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…in中获取嵌套对象属性的正确属性?_Javascript_Object_Properties_Nested_For In Loop - Fatal编程技术网

Javascript 如何在for…in中获取嵌套对象属性的正确属性?

Javascript 如何在for…in中获取嵌套对象属性的正确属性?,javascript,object,properties,nested,for-in-loop,Javascript,Object,Properties,Nested,For In Loop,给出以下代码段: let PARENT={ 儿童1:{ 否:‘1’, 页码:3, toString:function(){返回this.no;}}, 儿童2:{ 否:‘2’, 页码:4, toString:function(){返回this.no;}}, } log(JSON.stringify(PARENT,null,1)) for(让c进入父级){ //c是这里的子对象,对吗? console.log(c)//为什么toString()中的“CHILD\n”而不是“no”? console

给出以下代码段:

let PARENT={
儿童1:{
否:‘1’,
页码:3,
toString:function(){返回this.no;}},
儿童2:{
否:‘2’,
页码:4,
toString:function(){返回this.no;}},
}
log(JSON.stringify(PARENT,null,1))
for(让c进入父级){
//c是这里的子对象,对吗?
console.log(c)//为什么toString()中的“CHILD\n”而不是“no”?
console.log(c.page)//为什么未定义而不是“page”?

}
如评论中所述,
用于。。。在
中,通过按键循环;i、 e.与对象相对的字符串
'CHILD_1'
'CHILD_2'

用于。。。of
遍历值,但是,不能直接迭代对象,因为对象是不可迭代的<(值{}){}的代码>将抛出错误

相反,在使用
进行迭代之前,您必须通过例如
Object.values
来获取可编辑的值列表。。。属于

最后,
console.log
不会自动调用
toString
,因此必须显式调用它

let PARENT={
儿童1:{
否:‘1’,
页码:3,
toString:function(){返回this.no;}},
儿童2:{
否:‘2’,
页码:4,
toString:function(){返回this.no;}},
};
for(让c表示对象值(父对象)){
控制台日志(c);
log(c.toString());
控制台日志(c.page);

}
如评论中所述,
用于。。。在
中,通过按键循环;i、 e.与对象相对的字符串
'CHILD_1'
'CHILD_2'

用于。。。of
遍历值,但是,不能直接迭代对象,因为对象是不可迭代的<(值{}){}的代码>将抛出错误

相反,在使用
进行迭代之前,您必须通过例如
Object.values
来获取可编辑的值列表。。。属于

最后,
console.log
不会自动调用
toString
,因此必须显式调用它

let PARENT={
儿童1:{
否:‘1’,
页码:3,
toString:function(){返回this.no;}},
儿童2:{
否:‘2’,
页码:4,
toString:function(){返回this.no;}},
};
for(让c表示对象值(父对象)){
控制台日志(c);
log(c.toString());
控制台日志(c.page);

}
用于。。。在
循环键中,
用于。。。of
循环遍历属性值。另外,
Object.entries()
给出了一个二维数组,其中包含
[键,值]
项。@Pointy因此,
for…in
将对象视为一个数组,由
键:值
对组成,对吗?如果是,这个传递式是否像
PARENT[0][0]
PARENT['CHILD\u 1']['no']
那样产生
'1'
用于。。。在
循环键中,
用于。。。of
循环遍历属性值。另外,
Object.entries()
给出了一个二维数组,其中包含
[键,值]
项。@Pointy因此,
for…in
将对象视为一个数组,由
键:值
对组成,对吗?如果是,这是像
PARENT[0][0]
PARENT['CHILD\u 1']['no']
那样的传递式,产生
'1'
?谢谢你的回答。你的第二段准确地预测了我在第一条评论后得到的结果:
TypeError:PARENT不可编辑
。你澄清了这一点,现在一切都正常了。@GeroldBroser yea对这一评论及其含义表示抱歉;在我的世界里,我不使用这两种
形式,所以我只有“学术”准知识:)Re p.4:是的,我忘记了
toString()的
字符串
上下文,比如
`${c}`
。这就是我在这里真正使用的方法,以避免
+
串联和更长的键入/读取时间。好的,现在
.log(c)
打印对象,但是
.log(`c=${c}`)
当然打印
c=1
|
c=2
。除了
.log(“c=,c)
,现在如何用前导字符串打印对象?不要覆盖toString?谢谢您的回答。你的第二段准确地预测了我在第一条评论后得到的结果:
TypeError:PARENT不可编辑
。你澄清了这一点,现在一切都正常了。@GeroldBroser yea对这一评论及其含义表示抱歉;在我的世界里,我不使用这两种
形式,所以我只有“学术”准知识:)Re p.4:是的,我忘记了
toString()的
字符串
上下文,比如
`${c}`
。这就是我在这里真正使用的方法,以避免
+
串联和更长的键入/读取时间。好的,现在
.log(c)
打印对象,但是
.log(`c=${c}`)
当然打印
c=1
|
c=2
。除了
.log(“c=,c)
,现在如何打印带前导字符串的对象?不要重写toString?