web-dev-qa-db-ja.com

JavaScriptで未定義でないものがないかテストします

if(response[0].title !== undefined)をチェックしていますが、エラーが発生します。

Uncaught TypeError:未定義のプロパティ 'title'を読み込めません。

215
Raimonds

response[0]は定義されていません。定義されているかどうかを確認してから、そのプロパティのタイトルを確認してください。

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}
338
amosrivera

response[0]が未定義かどうかを確認してください。

if(response[0] !== undefined) { ... }

それでもタイトルを明示的に確認する必要がある場合は、最初の確認の後に確認してください。

if(response[0] !== undefined && response[0].title !== undefined){ ... }
37
Rion Williams

上記の他のすべてのコード例で問題がありました。 Chromeでは、これが私にとってうまくいった条件でした。

typeof possiblyUndefinedVariable !== "undefined"

私は他のブラウザでそれをテストし、どうすればいいかを確かめる必要があります。

34
Karl Henselin

実際には、コードが機能しなくなることがないように、Try/Catchブロックで囲む必要があります。このような:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }
12
André Luiz

typeof:

var foo;
if (typeof foo == "undefined"){
  //do stuff
}

response[0]自体が未定義のためです。

1
DavidGouge

condition == nullかどうか確認してください。それは問題を解決します

1
Tanmay Chandra

response[0]が実際に存在するかどうかを確認してください。エラーは存在しないことを示唆しているようです。

0
Exelian

最初にresponse[0]が未定義かどうかをチェックしなければなりません、そして、そうでない場合だけ、残りをチェックしてください。つまり、あなたの場合、response[0]は未定義です。

0
Alex Turpin

私は私が7ヶ月遅れてここに行ったことを知っている、しかし私はこの質問を見つけた、そしてそれは面白そうに見える。私はこれを私のブラウザコンソールで試しました。

try{x,true}catch(e){false}

変数xが未定義の場合、errorが捕捉されてfalseになり、そうでない場合はtrueを返します。そのため、eval関数を使って値を変数に設定することができます。

var isxdefined = eval('try{x,true}catch(e){false}')
0
AngeLOL