JavaScriptにオブジェクトが存在するかどうかを確認します


313

JavaScriptでオブジェクトの存在を確認するにはどうすればよいですか?

次の作品:

if (!null)
   alert("GOT HERE");

しかし、これはエラーをスローします:

if (!maybeObject)
   alert("GOT HERE");

エラー:

maybeObject 定義されてない。

回答:


578

typeof未定義の変数に対して安全に演算子を使用できます。

nullを含む値が割り当てられている場合、typeofはundefined以外の値を返します。typeofは常に文字列を返します。

したがって

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

73
常に文字列である場合は!==、比較を行うことができます(すべきです)。
Micah

9
これはJavascriptのコア機能であるため、組み込みのエラーが発生しやすく、エラーが発生しにくいのは残念です。文字列の比較により、これらの種類のチェックで小さなタイプミス(タイプミスなど)が発生した場合、コンパイラが100%確実に通知することができなくなります。
ドミ2013年

私の場合、私はこのオブジェクトを検索するので、これは役に立ちません。私は..私は、オブジェクトがどのclickeryなしdomtreeどこかにあるかどうかを確認するために、WELとして、コンソールで使用できるソリューションをしたい
blamb

@TJCrowderこれらの例にはもうアクセスできないようです。
Stefan van den Akker

1
@StefanvandenAkker:悪い例へのリンクはjsbin.com/ibeho3/1である必要があります。jsbin.com/ibeho3/2が良い例です。(残念ながらJSBinは最新のものにリダイレクトし、人々はそれを1インチ以内に編集しています。)
TJ Crowder '27

48

ここにはハーフ・トゥルースがたくさんあるので、いくつかはっきりさせたいと思いました。

実際には、変数が存在するかどうかを正確に判断することはできません(2行ごとにtry-catchブロックにラップする必要がない限り)。

その理由は、Javascriptにこの悪名高い値がundefinedあり、その変数が定義されていない、または存在しないことを驚くほど意味しないからです。undefined !== not defined

var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)

したがって、存在する変数とレポートできない変数の両方が undefined タイプを。

ケビンの誤解@については、null == undefined。それは型の強制によるものであり、Crockfordがこの種のことを===よく知らないすべての人に常に厳密な等価演算子を使用して偽の可能性のある値をテストするように指示し続ける主な理由です。null !== undefinedあなたが期待するかもしれないものをあなたに与えます。これfoo != nullは、変数がundefinedでもでもないかどうかを確認する効果的な方法であることに注意してくださいnull。もちろん、読みやすくするために、明示的にすることもできます。

オブジェクトが存在するかどうかを確認するために質問を制限する場合、typeof o == "object"配列オブジェクトを考慮しない場合を除いて、これは良い考えかもしれませんobject。言うtypeof nullまでもありませんが、objectこれは単に間違っています。

あなたが本当に気をつけなければなりません原初のエリアtypeofundefinednullunknownおよびその他のmisteriesは、ホストオブジェクトです。彼らは信頼できません。彼らは彼らが望むほとんどすべての汚いことをするのは自由です。ですから、機能に注意してください。可能であれば機能を確認してください。これは、存在しない機能を安全に使用する唯一の方法です。


5
定義されていないfoo!=null場合、単純に行うとReferenceErrorが生成fooされます。したがって、typeof例外をキャッチする予定がない限り、を使用することをお勧めします。
JAL

1
もう一度書き留めます:undefined !== not defined&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'!= nullそれが存在するかどうかをチェックするのに良いとは言いませんでした。あなたはそれを文脈から外しています。(私はまた、OPの質問の主題に厳密に関連するのではなく、付記であると述べました)
gblazex 2010年

2
タイプと定義されていない用語をもう一度混同しundefinedます。彼らは同じではありません。(note) it can be used !== you should use。読みながら常識を使用してください。変数が宣言され(パラメーターリストなど)、変数に値があるかどうかを確認する場合、!=nullは完全に安全です。これはOPが要求したものとは異なるユースケースです。そのため、私はそれをメモとして導入しました。段落全体は、@ Kevinの投稿と型強制型変換についてです。よく読んでみればわかると思いますが。
gblazex 2010年

@JALには、変数が宣言されていることがわかっている場合に、エラーの危険性がない部分がありません!= null。これは、関数の引数をチェックするために非常に有用である、考える:var hasValue = function(foo) {return foo != null}
tybro0103

@ tybro0103それは本当ですが、全体の問題は「JavaScriptでオブジェクトの存在を確認するにはどうすればよいですか?」です。宣言されていると確信できる場合は、状況が異なります。
JAL

12

以下を使用できます。

if (typeof objectName == 'object') {
    //do something
}

8

二つの方法。

ローカル変数のtypeof

typeofを使用してローカルオブジェクトをテストできます。

if (typeof object !== "undefined") {}

グローバル変数のウィンドウ

ウィンドウオブジェクトを調べることにより、グローバルオブジェクト(グローバルスコープで定義されたもの)をテストできます。

if (window.FormData) {}



4

スレッドはかなり前に開かれました。その間、三項演算子の使用が最も簡単なオプションだと思います。

maybeObject ? console.log(maybeObject.id) : ""

いや、何かに沿って、そうでないかvar maybeObject = typeof maybeObject !== "undefined" ? Chart:false;どうかを確認してくださいfalse
Hmerman6006

3

私は以前if(maybeObject)、JavaScriptでnullチェックとしてa を実行していました。

if(maybeObject){
    alert("GOT HERE");
}

したがって、maybeObject-がオブジェクトの場合のみ、アラートが表示されます。私のサイトに例があります。

https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes


問題は、maybeObjectが宣言されていない場合にエラーがスローされることです 。maybeObjectが定義されていません
Juanma Menendez

場合maybeObject0, 0.0, or ""falseに、それをチェック
alejandrociatti

3

上記のtypeOfの例をテストしたところ、どれも機能しなかったため、代わりにこれを使用しました。

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }


1

オブジェクト/変数の存在を確認することとは別に、「最悪の場合」の出力を提供するか、少なくともそれをアラートにトラップして、見過ごされないようにすることができます。

エラーをチェックし、代替を提供し、エラーをキャッチする関数の例。

function fillForm(obj) {
  try {
    var output;
    output = (typeof obj !== 'undefined') ? obj : '';
    return (output);
  } 
  catch (err) {
    // If an error was thrown, sent it as an alert
    // to help with debugging any problems
    alert(err.toString());
    // If the obj doesn't exist or it's empty 
    // I want to fill the form with ""
    return ('');
  } // catch End
} // fillForm End

これを作成したのは、渡したオブジェクトがx、xm、xm [z]であり、xmが存在しない場合はtypeof xm [z]がエラーで失敗するためです。

お役に立てば幸いです。(ところで、私はJSの初心者です)


1

私にとってこれはDOMオブジェクトに対して機能しました:

if(document.getElementsById('IDname').length != 0 ){
   alert("object exist");
}

1

その存在のみを気にする場合(宣言されているか?)、承認された答えで十分です。

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

実際の値があることを気にする場合は、以下を追加する必要があります。

if (typeof maybeObject != "undefined" && maybeObject != null ) {
   alert("GOT THERE");
}

なので typeof( null ) == "object"

例えば bar = { x: 1, y: 2, z: null}

typeof( bar.z ) == "object" 
typeof( bar.not_present ) == "undefined" 

あなたはそれがだでもないことを確認し、このようnullまたはundefined、それ以来typeof値が存在しない場合は、エラーはありませんプラス&&短絡、あなたは実行時エラーを取得することはありません。

個人的には、ヘルパーfnをどこかに追加することをお勧めします(信頼しないでくださいtypeof())。

function exists(data){
   data !== null && data !== undefined
}

if( exists( maybeObject ) ){
    alert("Got here!"); 
}

0
if (n === Object(n)) {
   // code
}

5
このコードブロックはOPの質問に答える可能性がありますが、このコードが質問のコードとどのように異なるか、変更した内容、変更した理由、および問題を解決する理由を説明する場合、この回答ははるかに役立ちます。他人を紹介することなく。
Mifeet


-1

div alignmntタブ付きパネルを使用して、Textbox値を1フレームからインラインフレームに設定します。したがって、最初に、値を設定する前に、選択したタブ付きパネルフレームが使用可能かどうか、または次のコードを使用していないかを確認する必要があります。

JavaScriptコード:

/////////////////////////////////////////
<script>

function set_TextID()
            {
                try
                    {
                        if(!parent.frames["entry"])
                            {
                            alert("Frame object not found");    
                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["entry"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["education"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["education"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["contact"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["contact"].document.getElementById("form_id").value=setText;
                            }

                        }catch(exception){}
                }

</script>

-1

0とnullは暗黙のポインタです。計算、比較、または「0」を画面に出力しない場合は、実際に入力する必要はありません。その暗黙。暗黙のように。Typeofも同じ理由で必要ありません。見る。

if(obj)console.log( "exists");

含まれていないため、notまたはそれ以外の場合のリクエストは表示されませんでした。質問に合わない追加のコンテンツが大好きです。シンプルにしましょう。


私は疑問に思っていませんif (!maybeObject)-しかし、実際、タイトルは反対を求めています。
アルマリ

-4

このように最も簡単だと思います

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");

-10

または、代わりに私の排他的なexists()メソッドの使用を開始して、不可能と考えられることを実行できます。つまり:

のようなものexists("blabla")、または: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")も可能です...


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