2016-06-22 4 views
0

次のオブジェクトoと、空の配列であるコンソールプロパティに出力する関数findEmptyを考えてみましょう。else ifステートメントがfalseと評価される条件を入力する理由を特定できません

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); 
     } 
    } 
} 

デバッグでは、else ifがチェックする条件がfalseになりますが、入力を続けます。私は行方不明で何ですか?

enter image description here

更新:デバッグ中に、実行している/それ以外の場合はfalse評価のためのコードを実行するのと同じブール変数のコンソールであれば。

enter image description here

+4

。少なくともChrome 51では。 –

+3

再生できません:https://jsfiddle.net/yLf0bjyt/ elseの中の警告は決して引き起こされません。記述している動作を複製するコードを表示する必要があります。 – JJJ

+0

@JamesThope、お手伝いをしてくれてありがとう、もう一度試してみよう。 Firefoxを使っていますか? – Veverke

答えて

-5

どうpropValueは同時に、オブジェクトと配列することができますか?

は、それはすべきではありません:あなたはcondition`がfalse`を `として出てくるとの両方` if`文がスキップされ、 `、` findEmpty(O) `と一緒に、投稿したコードを使用して

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

'array'は型ではありません。配列はオブジェクトです。 (したがって、 'isArray'関数の存在) – 4castle

+1

あなたは'! 'を見落としていますか? – deceze

+0

なぜ条件がfalseに評価され、それを入力するかが私の問題です。 – Veverke

関連する問題