Vérifier si L'objet existe en JavaScript

Comment vérifier L'existence d'un objet en JavaScript?

les œuvres suivantes:

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

But this Lakes an Error:

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

L'Erreur:

maybeObject n'est pas défini.

253
demandé sur AustinWBryan 2010-11-15 20:04:55
la source

16 ответов

vous pouvez utiliser en toute sécurité l'opérateur typeof sur des variables non définies.

si une valeur lui a été assignée, y compris null, typeof retournera autre chose qu'indéfini. typeof renvoie toujours une chaîne.

donc

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}
473
répondu JAL 2013-10-31 17:33:26
la source

il y a beaucoup de demi-vérités ici, donc j'ai pensé que je rendais certaines choses plus claires.

en fait, vous ne pouvez pas dire avec précision si une variable existe (sauf si vous voulez envelopper chaque deuxième ligne dans un bloc d'essai-catch).

la raison est Javascript a cette valeur notoire de undefined qui ne signifie pas de façon frappante que la variable n'est pas définie, ou qu'elle n'existe pas undefined !== not defined

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

donc à la fois variable qui existe et une autre qui ne peut pas vous déclarer le type undefined .

comme pour l'idée fausse de @Kevin, null == undefined . C'est dû à la coercition de type, et C'est la principale raison pour laquelle Crockford continue de dire à tous ceux qui ne sont pas sûrs de ce genre de chose d'utiliser toujours l'opérateur d'égalité stricte === pour tester les valeurs éventuellement fausses. null !== undefined vous donne ce que vous pourriez attendre. Veuillez également noter que foo != null peut être un moyen efficace pour vérifier si une variable n'est ni undefined ni null . Bien sûr, vous pouvez être explicite, parce qu'il peut aider la lisibilité.

si vous restreignez la question pour vérifier si un objet existe, typeof o == "object" peut être une bonne idée, sauf si vous ne considérez pas les objets arrays, car cela sera également rapporté pour être le type de object qui peut vous laisser un peu confus. Sans mentionner que typeof null vous donnera aussi object ce qui est tout simplement faux.

Le primal zone où vous devriez vraiment être prudent quant à l' typeof , undefined , null , unknown et d'autres misteries d'accueil sont des objets. Ils ne peuvent pas être digne de confiance. Ils sont libres de faire presque tout sale chose qu'ils veulent. Alors faites attention avec eux, vérifiez la fonctionnalité si vous le pouvez, parce que c'est la seule façon sûre d'utiliser une fonctionnalité qui n'existe peut-être même pas.

42
répondu galambalazs 2013-03-29 03:30:19
la source

vous pouvez utiliser:

if (typeof objectName == 'object') {
    //do something
}
10
répondu Calvin 2010-11-15 20:07:37
la source

de deux façons.

typeof pour les variables locales

vous pouvez tester pour un objet local en utilisant la typeof:

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

fenêtre pour variables globales

vous pouvez tester pour un objet global (défini sur la portée globale) en inspectant l'objet window:

if (window.FormData) {}
6
répondu superluminary 2013-10-31 17:18:26
la source

si c'est un objet global, vous pouvez utiliser if (!window.maybeObject)

5
répondu Nikita Rybak 2010-11-15 20:06:06
la source

vous pouvez utiliser "typeof".

if(typeof maybeObject != "undefined")
    alert("GOT HERE");
4
répondu RussellUresti 2010-11-15 20:10:21
la source

j'avais l'habitude de juste faire un if(maybeObject) comme le contrôle nul dans mon javascripts.

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

seulement si maybeObject - est un objet, l'alerte serait affiché. J'ai un exemple dans mon site.

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

4
répondu user513365 2012-03-22 18:38:32
la source

je viens de tester le type d'exemples ci-dessus et aucun n'a fonctionné pour moi, donc à la place j'ai utilisé ceci:

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd != null) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }
2
répondu Facundo Colombier 2015-04-28 21:50:58
la source

outre la vérification de l'existence de l'objet/variable, vous pouvez vouloir fournir une sortie" worst case " ou au moins la piéger dans une alerte afin qu'elle ne passe pas inaperçue.

exemple de fonction qui vérifie, fournit alternative, et les erreurs de capture.

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

j'ai créé ceci aussi parce que l'objet que je lui passais pourrait être x , X. m, X. m [z]et type de X. m[z] échouerait avec une erreur si x.m n'existait pas.

j'espère que ça aidera. (BTW, je suis novice avec JS)

1
répondu Rub 2015-04-05 20:56:31
la source

définit la valeur de la zone de texte à un cadre en ligne en utilisant le panneau tabbed div alignmnt. Donc tout d'abord, avant de définir la valeur, nous avons besoin de vérifier les panneaux tabbed sélectionnés frame disponible ou n'utilisant pas les codes suivants:

Code 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
répondu Ram 2013-09-13 10:39:04
la source
if (n === Object(n)) {
   // code
}
0
répondu Leo Lanese 2015-09-08 17:36:57
la source

pour moi cela a fonctionné:

if(document.getElementsByClassName("classname").length != 0 ){
   alert("classname exist");
}
0
répondu and-bri 2017-08-14 18:12:54
la source

vous pouvez utiliser l'opérateur ! deux fois !! :

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

Ou un "temps de 151920920" pour n'existe pas:

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

qu'est-Ce que l' !! (non pas) opérateur en JavaScript?

0
répondu Rohmer 2018-07-02 18:39:02
la source
if (maybeObject !== undefined)
  alert("Got here!");
-1
répondu plunk2000 2012-08-29 20:43:03
la source

pense que c'est plus facile comme ça

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");
-5
répondu noobtoo 2014-04-19 19:00:04
la source

ou, vous pouvez tous commencer à utiliser mon exclusive existe () méthode à la place et être en mesure de faire des choses considérées comme impossibles. c'est à dire:

des choses comme: exists("blabla") , ou même: exists("foreignObject.guessedProperty.guessNext.propertyNeeded") sont également possibles...

-8
répondu Bill the Lizard 2012-03-20 06:45:15
la source