web-dev-qa-db-ja.com

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

JavaScriptでオブジェクトが存在することを確認する方法

次のように動作します。

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

しかしこれはエラーを投げます:

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

エラー:

maybeObjectは定義されていません。

275
Yarin

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

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

だから

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

ここには多くの半分の真実がありますので、私はいくつかのことを明確にすることを考えました。

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

理由は、Javascriptがこの悪名高いundefinedname__の値を持っているからです。これは、変数が定義されていないことや、変数が存在しないことを意味しませんundefined !== not defined

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

したがって、存在する変数と、undefinedname__型を報告できない別の変数の両方があります。

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

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

typeofname __、undefinedname __、nullname __、unknownname__、およびその他のミステリーに本当に注意する必要がある主な領域は、Hostオブジェクトです。彼らは信頼できません。彼らは彼らが望むほとんどすべての汚いことを自由に行うことができます。したがって、可能であれば機能をチェックしてください。存在しない可能性のある機能を使用する唯一の安全な方法です。

45
gblazex

あなたが使用することができます:

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

もしそれがグローバルオブジェクトなら、if (!window.maybeObject)を使うことができます。

6
Nikita Rybak

二通り。

ローカル変数のtypeof

Typeofを使ってローカルオブジェクトをテストすることができます。

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

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

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

if (window.FormData) {}
6
superluminary

あなたは "typeof"を使うことができます。

if(typeof maybeObject != "undefined")
    alert("GOT HERE");
4
RussellUresti

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

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

そのためmaybeObject - がオブジェクトである場合に限り、警告が表示されます。私のサイトに例があります。

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

4
user513365

上記のtypeOfの例をテストしたばかりで、動作しないものがあるので、代わりにこれを使用しました。

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

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

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

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

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

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、x.m、x.m [z]、typeof x.m [z]である可能性があるため、x.mが存在しない場合はエラーで失敗します。

助けになれば幸いです。 (ところで、私はJSの初心者です)

1
Rub

!演算子は!!を2回使用できます。

if (!!maybeObject)
  alert("maybeObject exists");

または!が存在しない場合があります。

if (!maybeObject)
  alert("maybeObject does not exist");

何ですか! JavaScriptの(ではない)演算子?

1
Rohmer

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

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
alejandrociatti

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>
0
Ram

スレッドはかなり前に開かれました。その間、三項演算子を使うのが最も簡単な選択肢だと思います。

maybeObject ? console.log(maybeObject.id) : ""
0
Greg Holst
if (n === Object(n)) {
   // code
}
0
Leo Lanese

ゼロとNULLは暗黙的なポインタです。画面に算術演算、比較、または '0'を印刷しないのであれば、実際に入力する必要はありません。その暗黙の黙示のように。 typeofも同じ理由で必要ありません。時計。

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

私はnotの要求を見ませんでした、さもなければそれが含まれていないのでそこにあります。質問に収まらない余分なコンテンツが大好きです。簡単にしましょう。

0
ireadgud