2016-05-05 12 views
0

特定のjavascriptオブジェクトが存在するかどうかを確認しようとしています。typeof演算子が期待どおりに動作していない

var success = function(data) { 

    var x= 0; 
    var numOfCards = data.length; 

    for (x=0;x<data.length - 1;x++) 
     { 
      if (typeof data[x].labels[0].name !== 'undefined') 
      { 
       alert("Object Exists"); 
      } 
     } 
    } 

しかし、Chromeは次のエラーを受信:確かに

(index):21 Uncaught TypeError: Cannot read property 'name' of undefined

を、オブジェクトの状態を確認するためのtypeofの私の使用は、それ自体が、エラーになるべきではないのですか? 「ラベル」配列が空であるしかし

data[0].labels[0].name = "I am a value"

data[0].labels[1].name

は、エラーが発生しますので、最初の反復では、警告ボックスが表示さは予想通り。

+0

'typeof'は単に値の「型」を返します。値を生成する式を評価するときに間違いなくエラーが発生することがあります。例: 'typeof foo()' 'foo'が関数でない場合、これはエラーを投げます。 –

答えて

4

これは間違いなく期待どおりに動作しています。

Surely, my use of typeof to check the status of the object should not, in itself, result in an error?

確かに、nameが未定義の場合。この場合、data[0].labels[0]は既に定義されていません!

ネストされたオブジェクトを調べる前に、すべてのレベルをundefinedにしたい場合は、レベルごとにtypeofというステートメントをネストしてください。

+0

Javascriptには、CoffeescriptやRubyのようなインラインの存在演算子があって、手動でそれらのネストされたチェックを書き込むオーバーヘッドに煩わされることはありません。例えば'data [0] ?. labels [0] ?. name' – jusopi

+0

https://github.com/Kikobeats/existential –

0

typeof演算データは、[X] .labels [0] .nameのかどうかをチェックする前に!== '未定義'、typeof演算データは、[X] .labels [0]!==「未定義ことを確認してください

if (typeof data[x].labels[0] !== 'undefined') 
{ 
    alert("Object Exists"); 
} 
関連する問題