JavaScript多层嵌套子对象的访问、赋值问题及控制台输出异常求助
问题解析与解决方案
嗨,别担心,这其实是两个很常见的入门小问题,我帮你一一理清:
1. 为什么直接赋值多层嵌套对象会失败?
当你写data[report][time][name][date] = value时,data一开始是空对象{},此时data[report]是undefined——你没法直接访问一个undefined的属性(比如time),JS会直接抛出Cannot set properties of undefined的错误。所以你之前逐层创建空对象的思路是完全正确的,必须确保每一层的对象都存在后,才能继续赋值下一层。
2. 为什么控制台输出显示[Object]而不是完整结构?
你的代码逻辑其实没出错!控制台为了避免输出内容过长,会自动把深层嵌套的对象折叠显示为[Object]。你只需要:
- 在浏览器或Node控制台里点击
[Object]旁边的小箭头,就能展开查看完整的嵌套结构; - 或者用
JSON.stringify()来打印格式化后的完整字符串,比如把console.log(data)改成:
console.log(JSON.stringify(data, null, 2));
这样就能直接看到所有层级的内容了,输出会是你预期的:
{ "Income Statement": { "Annually": { "Revenue": { "2017": "10000000" } } } }
优化你的代码(可选)
如果不想每次都手动创建空对象,可以用||运算符来简化逐层创建的逻辑,避免重复代码:
function test(){ var report = 'Income Statement'; var time = 'Annually'; var name = 'Revenue'; var date = '2017'; var value = '10000000'; var data = {}; // 只有当对应层级不存在时,才创建空对象 data[report] = data[report] || {}; data[report][time] = data[report][time] || {}; data[report][time][name] = data[report][time][name] || {}; data[report][time][name][date] = value; console.log(JSON.stringify(data, null, 2)); }
这样写既保持了逻辑清晰,又减少了冗余代码~
内容的提问来源于stack exchange,提问作者Tomtetot
相关产品推荐
相关产品推荐

