JavaScript如何输出对象的键名及其全部属性值?
报错根因
你的循环逻辑有两处关键偏差,直接导致了输出不符合预期:
- 内层取值逻辑错位:你在第二层循环里写的是
console.log(savedColor[y]),这里y是嵌套对象的属性名(也就是background、text),但代码是从最外层的savedColor根对象上找名为y的属性——根对象只有plat1、plat2两个键,根本没有和y匹配的键,所以全部返回undefined。 - 外层打印对象而非键名:第一层循环里你直接打印
savedColor[x],这是一个嵌套的普通对象,控制台会默认将其序列化成[Object object],而你预期的第一行输出其实是外层的键名(也就是plat1/plat2本身),压根不需要打印整个嵌套对象。
修正后可实现预期的代码
var savedColor = { "plate1" : { "background" : "rgb(0,0,0)", "text" : "rgb(255,255,255)" }, "plate2" : { "background" : "rgb(0,50,50)", "text" : "rgb(0,0,0)" } } for (var outerKey in savedColor) { // 打印当前外层键名,匹配预期的plate1/plate2输出行 console.log(outerKey); // 取出当前键对应的嵌套对象,后续直接从这个对象上取属性值 var innerPart = savedColor[outerKey]; for (var innerKey in innerPart) { console.log(innerPart[innerKey]); } }
注:原对象里的键名拼写是
plat1/plat2,和你预期输出的plate1/plate2差了一个字母e,上面的代码已经把键名修正为和预期输出完全对齐的版本。
运行上面的代码,控制台就会逐行输出你需要的结构:
plate1 rgb(0,0,0) rgb(255,255,255) plate2 rgb(0,50,50) rgb(0,0,0)
内容的提问来源于stack exchange,提问作者S a h a d S a j
相关产品推荐
相关产品推荐

