我有一个像树一样结构的 JSON:有一个根节点,每个节点都有一些属性和一个包含子节点 (node.children) 的数组。我正在通过递归调用执行有序遍历,即
let myJsonTree = ...;
myFunction(myJsonTree.root);
function myFunction(node){
for(let i=0; i<node.children.length; i++){
myFunction(node.children[i]);
}
...
doing something with node.attribute;
...
}
当我在 IDE 中本地运行此脚本时,我没有收到任何错误,但是当我在 Tomcat 服务器上运行它时,我在浏览器控制台中收到以下错误:“TypeError: Cannot read properties of undefined (reading 'attribute' )”。
我做错了什么?我应该以某种方式定义节点对象(它是原始 JSON 的子树),或者即使未定义,我如何访问属性?
当您尝试访问未正确定义的对象的属性时,可能会发生这种情况。
像这样检查一下
if (node && node.attribute !== undefined) {
console.log(node.attribute);
}
或简单地
node?.attribute
据我所知,此错误通常发生在该方法未定义或返回该部分的虚假值时我认为您可以使用“?”运算符如:object?.method 另外,我认为你实现这一点的方式可以重构。 由于递归函数通常表现不佳,因此我认为没有必要在循环中递归调用该函数。相反,只需在循环内做你想做的事
function myFunction(node){
for(let i=0; i<node.children.length; i++){
do your something with node.attribute here
}
}