console.log显示对象,但递归调用函数时获取错误

时间:2013-05-01 02:03:12

标签: javascript json recursion

所以这是我的代码:

function makeContent(jsonData){
    var aProperty, containerType, contentContainerName, containerIdentifier, containerComment, theContent ; 

    for(aProperty in jsonData){
        switch(aProperty){
            case "containerType": containerType = jsonData[aProperty];
            case "contentContainerName" : contentContainerName = jsonData[aProperty]; 
            case "containerComment" : containerComment = jsonData[aProperty];
            case "containerIdentifier" : containerIdentifier = jsonData[aProperty];
            case "itemContent" : theContent = jsonData[aProperty];
        }
    }


    if(theContent.hasOwnProperty){
        console.log(theContent);
        makeContent(theContent);
    }

我将此作为输出:

  

[Object] footer.js:59

     

TypeError:'undefined'不是对象(评估'theContent.hasOwnProperty')footer.js:58

这对我来说没有意义,因为当我在console.log(theContent)中我得到一个对象并且它工作正常。只有在我尝试递归调用函数时添加makeContent函数时才会出现错误。所以我没有添加return语句因为这个错误,我应该这样做吗?

1 个答案:

答案 0 :(得分:1)

您似乎正在使用条件表达式if(theContent.hasOwnProperty)来确定是否定义了theContent。变量在函数顶部声明,并且仅在最终case中定义。

检查变量是否定义的最可靠方法是:

if (typeof theContent !== 'undefined`) { ... }

如果未执行最终case语句,则未定义theContent,并且尝试访问未定义值的hasOwnProperty将导致观察到的错误。