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?