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


回答:


345

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

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

20
投票数にもかかわらず、これはundefinedJavaScriptキーワードではないため、チェックを実行する良い方法ではありません(だれもがそうだと思っているようですが)。必要に応じて、呼び出される変数を作成するundefinedと、このチェックは正しくなくなります。唯一の正しい方法はチェックすること(typeof myVar !== 'undefined')です。
BadHorsie 2016年

4
@BadHorsieは理にかなっています、私はあなたのコメントで答えを更新しました。
amosrivera 2016年

1
変数が存在し、「未定義」を読み取る文字列が含まれている場合はどうなりますか?
TomeeNS

@BadHorsieあなたの主張は偽です。なぜ再定義する必要があるのundefinedですか?
Robert Siemer

@amosriveraいいえ、彼/彼女のコメントは意味がありませんでした。あなたはあなたの答えを悪化させました。
Robert Siemer

39

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

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

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

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

35

上記の他のすべてのコード例で問題が発生しました。Chromeでは、これは私にとってうまくいった状態でした:

typeof possiblyUndefinedVariable !== "undefined"

他のブラウザでそれをテストし、状況がどうなるかを確認する必要があります。


2
同じ-私undefinedは文字列でなければならないことがわかった。
2013年

これはクロームで新しいものでなければなりません(私はwin chrome 41 atmにいます)。受け入れられた答えはうまく機能していました!:P
joe

13

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

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

IE 8を見ていましたが、トライキャッチを行う必要がありました。
RonanOD 2013

1
これは、関数が定義されていない場合は、テストする場合の最良の方法である
edepperson

エラーをスローして未定義をチェックすることは良い解決策ではありません。@amosriveraが最良のソリューションです。
user3658423 2015

@ user3658423:エラーは発生しません。応答が宣言されていない場合にスクリプトが停止するのを防ぐだけです(エラーがスローされるため)。
アンドレ・ルイス

エラーが役立つ場合があります。提案された解決策では、doSomething()が例外をスローした場合、コンソールに表示されるのは、ファイルxyzの「キャッチされていない例外@行123」に関する有用なメッセージではなく、「responde [0] .title is undefined」だけです。 .js」。最終的に2番目の開発者がおそらくconsole.log()ステートメントをコメントアウトし、3番目の開発者がやって来てdoSomething()の奥深くで発生しているバグを修正するのを難しくします。
Eric Seastrand、2015




0

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


0

まずresponse[0]、が未定義であるかどうかを確認する必要があります。未定義でない場合のみ、残りを確認してください。つまり、あなたの場合、response[0]は未定義です。


0

私は7か月遅れてここに行ったのを知っていますが、私はこの質問を見つけました、そしてそれは興味深いようです。私は自分のブラウザコンソールでこれを試しました。

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

変数xが未定義の場合、エラーがキャッチされてfalseになり、そうでない場合はtrueが返されます。したがって、eval関数を使用して値を変数に設定できます

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

1
私がそう言うかもしれないなら面白いアプローチ。
Brandito 2018年

0

これらの回答のいくつかには、使用方法に関する根本的な誤解がありますtypeof

不正解

if (typeof myVar === undefined) {

正しい

if (typeof myVar === 'undefined') {

その理由はtypeof、文字列を返すからです。したがって、undefinedそれ自体がJavaScriptのプリミティブ型の 1つである(引用符で囲まれていない)ではなく、「未定義」という文字列を返したことを確認する必要がありますtypeofオペレータは、型の値を返すことはありませんundefined


補遺

誤った比較を使用すると、コードは技術的に機能する可能性がありますが、おそらくあなたが考える理由では機能しません。undefinedJavaScriptには既存の変数はありません。これは、比較可能な魔法のキーワードではありません。と呼ばれる変数を実際に作成し、undefinedそれに任意の値を与えることができます。

let undefined = 42;

これは、これを使用して最初の方法が正しくないことを証明する方法の例です。

https://jsfiddle.net/p6zha5dm/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.