Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t确定else if语句输入计算结果为false的条件的原因_Javascript - Fatal编程技术网

Javascript Can';t确定else if语句输入计算结果为false的条件的原因

Javascript Can';t确定else if语句输入计算结果为false的条件的原因,javascript,Javascript,考虑以下对象o和一个函数findEmpty,该函数应该打印到控制台属性,该属性的值为空数组 var o={ "StudentInfo": [{ "Name1": [{ "100": { "a": "12" } }, { "101": { "a": "50" } }] }, {

考虑以下对象o和一个函数findEmpty,该函数应该打印到控制台属性,该属性的值为空数组

var o={
    "StudentInfo": [{
        "Name1": [{
            "100": {
                "a": "12"
            }
        }, {
            "101": {
                "a": "50"
            }
        }]
    }, {
        "Name2": [{
            "102": {}
        }, {
            "103": {
                "b": "50"
            }
        }]
    }]
}

function findEmpty(obj)
{
    for (var p in obj)
    {
        debugger;
        var propValue = obj[p];
        var condition = propValue && typeof propValue === 'object' && !Array.isArray(propValue);
        if (Array.isArray(propValue) && propValue.length == 0) {
            console.log('Property ' + p + ' has an empty array.');
        }
        else if (condition) {
            findEmpty(propValue);
        }
    }
}
在调试中,elseif要检查的条件呈现为false,但它会一直输入它。我错过了什么

更新:调试期间,在控制台中对同一布尔变量运行if/else将执行错误计算的代码


一个propValue怎么能同时是一个对象和一个数组

难道不是:

var condition = propValue && typeof propValue === 'array' && !Array.isArray(propValue);

数组
不是一种类型。数组是对象。(因此存在
isArray
函数)您是否忽略了
..?为什么条件计算为false,如果输入它是我的问题。使用您发布的代码以及
findEmpty(o)
condition
显示为
false
,并且跳过
if
语句。至少在Chrome51中是这样。无法重现:elseif中的警报从未触发过。您必须显示复制所描述行为的代码。可能是Firefox调试器有问题:。(嗯…我知道我现在也对这个评论了,我觉得这听起来很熟悉…!)我的意思是
o
中唯一的东西就是一个对象数组。它既不是空数组(
if
)也不是对象(
else
),因此此代码不应生成输出。这正是它为这里的每个人所做的。调试器是您认为执行进入else-if块的唯一原因吗?如果将console.log语句放入其中,它是否会显示在控制台中?