Javascript Can';t确定else if语句输入计算结果为false的条件的原因
考虑以下对象o和一个函数findEmpty,该函数应该打印到控制台属性,该属性的值为空数组Javascript Can';t确定else if语句输入计算结果为false的条件的原因,javascript,Javascript,考虑以下对象o和一个函数findEmpty,该函数应该打印到控制台属性,该属性的值为空数组 var o={ "StudentInfo": [{ "Name1": [{ "100": { "a": "12" } }, { "101": { "a": "50" } }] }, {
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语句放入其中,它是否会显示在控制台中?