Comment vérifier l'existence d'un objet en JavaScript?
Les oeuvres suivantes:
if (!null)
alert("GOT HERE");
Mais cela jette une erreur:
if (!maybeObject)
alert("GOT HERE");
L'erreur:
maybeObject
n'est pas défini.
Vous pouvez utiliser en toute sécurité l' typeof
opérateur sur des variables non définies.
Si une valeur lui a été affectée, y compris null, typeof renverra autre chose qu'undefined. typeof renvoie toujours une chaîne.
Par conséquent
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
!==
pour la comparaison.Il y a beaucoup de demi-vérités ici, alors j'ai pensé clarifier certaines choses.
En fait, vous ne pouvez pas dire avec précision si une variable existe (sauf si vous voulez encapsuler toutes les deux lignes dans un bloc try-catch).
La raison en est que Javascript a cette valeur notoire
undefined
qui, de façon frappante, ne signifie pas que la variable n'est pas définie ou qu'elle n'existe pasundefined !== not defined
Donc, à la fois une variable qui existe et une autre qui ne peut pas vous signaler le
undefined
type.Quant à l'idée fausse @ Kevin,
null == undefined
. Cela 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 de toujours utiliser un opérateur d'égalité stricte===
pour tester les valeurs éventuellement fausses.null !== undefined
vous donne ce que vous attendez. Veuillez également noter que celafoo != null
peut être un moyen efficace de vérifier si une variable n'est niundefined
ninull
. Bien sûr, vous pouvez être explicite, car cela peut aider à la lisibilité.Si vous limitez la question pour vérifier si un objet existe, cela
typeof o == "object"
peut être une bonne idée, sauf si vous ne considérez pas les objets tableaux, car cela sera également signalé comme étant le type deobject
ce qui peut vous laisser un peu confus. Sans oublier quetypeof null
cela vous donnera également ceobject
qui est tout simplement faux.La zone primaire où vous devriez vraiment faire attention
typeof
,undefined
,null
,unknown
et d' autres sont des objets mystères hôtes. On ne peut pas leur faire confiance. Ils sont libres de faire presque n'importe quelle chose sale qu'ils veulent. Soyez donc prudent avec eux, vérifiez les fonctionnalités si vous le pouvez, car c'est le seul moyen sécurisé d'utiliser une fonctionnalité qui n'existe peut-être même pas.la source
foo!=null
produira une ReferenceError si ellefoo
n'est pas définie. Il est donc préférable de l'utilisertypeof
, sauf si vous prévoyez d'attraper l'exception.undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. Je n'ai pas dit qu'il!= null
est bon de vérifier s'il existe. Vous le sortez de son contexte. (J'ai également mentionné qu'il s'agit d'un sidenote, pas strictement lié au sujet de la question du PO)undefined
. Ils ne sont pas les mêmes.(note) it can be used !== you should use
. Faites preuve de bon sens pendant la lecture. Lorsque la variable est déclarée (liste de paramètres ou ailleurs) et que vous voulez vérifier si elle a une valeur,!=
null est complètement sûr. C'est un cas d'utilisation différent de ce que le PO a demandé, c'est pourquoi je l'ai introduit comme une note. Le paragraphe entier concerne le poste de @ Kevin et le type coercition btw. Comme vous pouvez le constater si vous lisez attentivement.!= null
lorsque vous savez que la variable a été déclarée. Ceci est très utile pour vérifier les arguments des fonctions, considérez:var hasValue = function(foo) {return foo != null}
Vous pouvez utiliser:
la source
Deux manières.
typeof pour les variables locales
Vous pouvez tester un objet local en utilisant typeof:
fenêtre pour les variables globales
Vous pouvez tester un objet global (celui défini sur la portée globale) en inspectant l'objet window:
la source
Si c'est un objet global, vous pouvez utiliser
if (!window.maybeObject)
la source
window.hasOwnProperty('maybeObject')
c'est un peu plus lisible, si c'est un objet globalVous pouvez utiliser "typeof".
la source
Le fil a été ouvert il y a un certain temps. Je pense que dans l'intervalle, l'utilisation d'un opérateur ternaire est l'option la plus simple:
la source
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
et vérifiez si nonfalse
.J'avais l'habitude de faire une
if(maybeObject)
vérification nulle dans mes javascripts.Donc, seulement si
maybeObject
- est un objet, l'alerte sera affichée. J'ai un exemple sur mon site.https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
la source
maybeObject
c'est le cas0, 0.0, or ""
, il vérifie fauxJe viens de tester les exemples de typeOf ci-dessus et aucun n'a fonctionné pour moi, donc j'ai plutôt utilisé ceci:
la source
En plus de vérifier l'existence de l'objet / de la variable, vous souhaiterez peut-être fournir une sortie "pire des cas" ou au moins la piéger dans une alerte afin qu'elle ne passe pas inaperçue.
Exemple de fonction qui vérifie, fournit une alternative et intercepte les erreurs.
J'ai créé cela aussi parce que l'objet que je lui passais pouvait être x, xm, xm [z] et typeof xm [z] échouerait avec une erreur si xm n'existait pas.
J'espère que ça aide. (BTW, je suis novice avec JS)
la source
pour moi, cela a fonctionné pour un objet DOM:
la source
Si vous ne vous souciez que de son existence (a-t-elle été déclarée?), La réponse approuvée suffit:
Si vous vous souciez qu'il ait une valeur réelle, vous devez ajouter:
Comme
typeof( null ) == "object"
par exemple
bar = { x: 1, y: 2, z: null}
De cette façon vous vérifiez qu'il est ni
null
ouundefined
, et depuistypeof
ne pas d' erreur si la valeur n'existe pas , plus&&
courts circuits, vous ne serez jamais obtenir une erreur d' exécution.Personnellement, je suggérerais d'ajouter un assistant fn quelque part (et ne faisons pas confiance
typeof()
):la source
la source
la source
définissez la valeur de la zone de texte sur un cadre pour le cadre en ligne à l'aide du panneau à onglets div alignmnt. Donc, tout d'abord, avant de définir la valeur, nous devons vérifier que le cadre des panneaux à onglets sélectionné est disponible ou non en utilisant les codes suivants:
Code Javascript:
la source
zéro et null sont des pointeurs implicites. Si vous ne faites pas d'arithmétique, ne comparez pas ou n'imprimez pas `` 0 '' à l'écran, il n'est pas nécessaire de le taper. C'est implicite. Comme implicite. Typeof n'est également pas requis pour la même raison. Regarder.
if (obj) console.log ("existe");
Je n'ai pas vu de demande de non ou bien car il n'est pas inclus en tant que. Autant j'aime le contenu supplémentaire qui ne rentre pas dans la question. Permet de rester simple.
la source
if (!maybeObject)
- mais en effet, le titre demande le contraire.Je pense que c'est plus simple comme ça
la source
Ou, vous pouvez tous commencer à utiliser ma méthode exclusive exclusive () à la place et pouvoir 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 ...la source