Comment déterminer si la variable est undefined
ou null
?
Mon code est le suivant:
var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
// DO SOMETHING
};
<div id="esd-names">
<div id="name"></div>
</div>
Mais si je fais cela, l'interpréteur JavaScript arrête l'exécution.
Réponses:
Pour ce faire, vous pouvez utiliser les qualités de l' opérateur d'égalité abstraite :
Parce que
null == undefined
c'est vrai, le code ci-dessus interceptera les deuxnull
etundefined
.la source
const y = undefined; y == null;
Il devrait revenirtrue
y
constant, mais vous avez comparéabc
(pasy
). Lorsque j'ai testéy
viaconsole.log(y == null);
Chrome et Firefox, j'ai obtenutrue
le résultat. Si vous avez une erreur, vous avez peut-être essayé d'utiliser l'opérateur d'affectation=
au lieu de la comparaison,==
ce qui aurait du sens de renvoyer l'erreur carconst
ne peut pas être réaffecté.null
ouundefined
à passer si la variable est égale0
? La question n'est pas de tester une valeur véridique, mais plutôt de tester explicitement pournull
ouundefined
.La façon standard d'attraper
null
etundefined
simultanément est la suivante:--qui est 100% équivalent au plus explicite mais moins concis:
Lors de la rédaction d'un JS professionnel, il est tenu pour acquis que l' égalité de type et le comportement de
==
vs===
sont compris. Par conséquent, nous utilisons==
et comparons uniquement ànull
.Modifier à nouveau
Les commentaires suggérant l'utilisation de
typeof
sont tout simplement faux. Oui, ma solution ci-dessus provoquera une ReferenceError si la variable n'existe pas. C'est une bonne chose. Cette ReferenceError est souhaitable: elle vous aidera à trouver vos erreurs et à les corriger avant d'envoyer votre code, tout comme les erreurs de compilation le feraient dans d'autres langues. Utiliseztry
/catch
si vous travaillez avec une entrée sur laquelle vous n'avez aucun contrôle.Vous ne devriez pas avoir de références à des variables non déclarées dans votre code.
la source
!==
au lieu de!=
.undefined
, comme le ferait toute variable déclarée mais non initialisée, c'est-à-direvar someVar;
que votre argument ne tient pas vraimentEn combinant les réponses ci-dessus, il semble que la réponse la plus complète serait:
Cela devrait fonctionner pour toute variable non déclarée ou déclarée et explicitement définie sur null ou non défini. L'expression booléenne doit être évaluée à false pour toute variable déclarée qui a une valeur réelle non nulle.
la source
typeof
c'est un opérateur, pas une fonction, donc il n'a pas besoin des parenthèses, mais j'apprécie néanmoins les parenthèses - simplement pour la clarté de la lecture.variable == null
la source
undefined
évalue égal ànull
./*jshint eqnull:true */
en haut de votre document ou fonction JS, et JSHint cessera de vous avertir de vos utilisations de== null
.==
est cassée. La coercitionif(variable == null)
dans cette réponse est tout à fait logique pour moi ...sera évalué à vrai si la valeur n'est pas:
nul
indéfini
NaN
chaîne vide ("")
0
faux
la source
if (EmpName)
. Si ceundefined
sera déjà faux.var EmpName; if (EmpName)
. Où la variable est définie mais sans valeur attribuée.La
attr()
fonction jQuery renvoie soit une chaîne vide, soit la valeur réelle (et jamaisnull
ouundefined
). La seule fois où il revientundefined
c'est lorsque votre sélecteur n'a renvoyé aucun élément.Donc, vous voudrez peut-être tester par rapport à une chaîne vide. Alternativement, puisque les chaînes vides, null et undefined sont false-y, vous pouvez simplement faire ceci:
la source
ReferenceError: EmpName is not defined
undefined
si l'attribut n'existe pas sur l'élément (pas seulement si le sélecteur n'a pas d'éléments correspondants, comme dans la réponse). Par exemple, unimg
avec nonsrc
reviendraitundefined
pour$('img').attr('src');
Je suis venu pour écrire ma propre fonction pour cela. JavaScript est bizarre.
Il est utilisable sur n'importe quoi. (Notez que cela vérifie également si la variable contient des valeurs utilisables . Mais puisque ces informations sont généralement également nécessaires, je pense que cela vaut la peine d'être publié). Veuillez envisager de laisser une note.
Compatible avec TypeScript.
Cette fonction doit faire exactement la même chose que la
empty()
fonction PHP (voirRETURN VALUES
)Considère
undefined
,null
,false
,0
,0.0
,"0"
{}
,[]
comme vide."0.0"
,NaN
," "
,true
Sont considérés comme non vide.la source
{ }
. C'est un problème de langage courant et idiot, mais je l'avais oublié. Toutes mes recherches affichent des réponses pour une valeur nulle non définie ou des comparaisons d'égalité lâches (==), mais pas une égalité stricte (===) ou l'équivalent. Et puis ici, dans votre réponse classée -1 tout en bas de la page (avant de voter), c'est la réponse qui m'a échappé.Object.keys( obj ).length < 1
ou peut-être === 0, en supposant que ce ne sera jamais -1. Quoi qu'il en soit, voté à 0, woo. : p==
à===
ici, alors ce serait une fonction raisonnable.Si la variable que vous souhaitez vérifier est une variable globale, faites
Cette façon de vérifier ne générera pas d'erreur même si la
yourVarName
variable n'existe pas.Exemple: je veux savoir si mon navigateur prend en charge l'API Historique
Comment cela fonctionne:
window
est un objet qui contient toutes les variables globales en tant que propriétés, et en JavaScript, il est légal d'essayer d'accéder à une propriété d'objet non existante. S'ilhistory
n'existe pas, ilwindow.history
revientundefined
.undefined
est falsey, donc le code dans unif(undefined){}
bloc ne fonctionnera pas.la source
null
ouundefined
, et cela ne fonctionnera pas si votre JavaScript s'exécute en dehors d'un navigateur (c'est-à-dire dans Node.js). Il traitera également les globaux définis sur0
,false
ou''
les mêmes que ceux qui ne sont pas déclarés ouundefined
ounull
, ce qui est généralement bien.Le plus court et le plus simple:
cela évaluera vrai si EmpName est:
la source
La façon la plus courte de procéder est probablement:
En voici la preuve:
Afficher l'extrait de code
Et voici plus de détails sur
==
(source ici )BONUS : la raison pour laquelle
===
est plus clair que==
(regardez la réponse agc )la source
Je viens d'avoir ce problème, c'est-à-dire de vérifier si un objet est nul.
J'utilise simplement ceci:
Par exemple:
la source
Puisque vous utilisez jQuery , vous pouvez déterminer si une variable n'est pas définie ou si sa valeur est nulle en utilisant une seule fonction.
la source
ReferenceError: s is not defined
pour le premier exemple.L'élément jQuery check n'est pas nul:
la source
En JavaScript, à ma connaissance, nous pouvons vérifier une variable non définie, nulle ou vide comme ci-dessous.
Vérifiez toutes les conditions:
la source
var
est un mot réservé, cela jetteraSyntaxError
Vous pouvez simplement utiliser ce qui suit (je sais qu'il existe des moyens plus courts de le faire, mais cela peut le rendre plus facile à observer visuellement, au moins pour ceux qui consultent le code).
la source
La façon la plus simple de vérifier est:
la source
false
, ce qui est potentiellement indésirable.undefined
,null
et quelques autres choses comme chaîne vide, +0, -0NaN
etfalse
passer à travers.!
l'opérateur contraint l'opérandevariable
- ici - à Boolean: ecma-international.org/ecma-262/#sec-tobooleanAvec la solution ci-dessous:
Je peux vérifier les éléments suivants:
la source
Pour tester si une variable est nulle ou non définie, j'utilise le code ci-dessous.
la source
typeof
et comparez àundefined
directement, pas sous forme de chaîne. Cela fonctionne mais l'opérateur supplémentaire n'a d'autre effet que de le rendre plus verbeux.J'exécute ce test dans la console Chrome. En utilisant (void 0), vous pouvez cocher indéfini:
la source
Regardons ça,
Dans ce qui précède, la variable est uniquement déclarée comme
apple
. Dans ce cas, si nous appelons la méthode,alert
elle s'affichera non définie.Dans le second, il affiche null, car la variable de
apple
valeur est null.Vous pouvez donc vérifier si une valeur est indéfinie ou nulle.
la source
Meilleur moyen:
la source
Parce que === vérifie à la fois le type et la valeur. Le type des deux est différent mais la valeur est la même.
la source
la source
typeof
ne donnera jamaisundefined
, seulement la chaîne'undefined'
. De plus,i == null
c'est déjà vrai sii
c'est le casundefined
, donc le second booléen serait redondant même s'il fonctionnait.La
foo == null
vérification devrait faire l'affaire et résoudre le cas "non défini OU nul" de la manière la plus courte. (Ne pas considérer le cas «foo n'est pas déclaré».) Mais les gens qui ont l'habitude d'avoir 3 égaux (comme la meilleure pratique) pourraient ne pas l'accepter. Regardez simplement eqeqeq ou triple-égal règles dans eslint et tslint ...L'approche explicite, lorsque nous vérifions si une variable est
undefined
ounull
séparément, doit être appliquée dans ce cas, et ma contribution au sujet (27 réponses non négatives pour l'instant!) Est d'utiliservoid 0
comme moyen à la fois court et sûr d'effectuer la vérification pourundefined
.L'utilisation
foo === undefined
n'est pas sûre car undefined n'est pas un mot réservé et peut être masqué ( MDN ). L'utilisation detypeof === 'undefined'
check est sûre, mais si nous ne nous soucions pas du cas foo-is-undeclared, l'approche suivante peut être utilisée:la source
si vous créez une fonction pour la vérifier:
la source
L'appel de typeof null renvoie une valeur d '«objet», car la valeur spéciale null est considérée comme une référence d'objet vide. Safari à travers la version 5 et Chrome à travers la version 7 ont une bizarrerie où l'appel de typeof sur une expression régulière renvoie «fonction» tandis que tous les autres navigateurs retournent «objet».
la source
Vous ne pouvez utiliser que le second: car il vérifiera à la fois la définition et la déclaration
la source
Je pense toujours que le meilleur moyen / sûr de tester ces deux conditions est de convertir la valeur en chaîne:
la source
Vous pouvez vérifier si la valeur est indéfinie ou nulle en utilisant simplement typeof:
la source
null
. Je ne comprends pas pourquoi de nouvelles réponses incorrectes sont fournies à une question qui a reçu une réponse correcte et complète il y a de nombreuses années. Pensez-vous que les réponses actuelles sont en quelque sorte insuffisantes?if(x==null)
est une mauvaise idée en JavaScript. Jugez avec"=="
- cela peut provoquer une contrainte de type inattendu, et il ne peut pas être lu par CoffeeScript, n'utilisez jamais "==" ou "! =" Dans le jugement de condition!if(x)
sera mieux, mais soyez prudent avec 0 et "" . Elle sera traitée comme fausse , et non la méthode égale à"!= null"
est vraie .Voir Meilleures pratiques JavaScript .
la source
==
pour comparernull
est la façon standard d'attrapernull
etundefined
dans JS. La coercition de type avec==
n'est pas un risque dans ce contexte spécifique, et est en fait mise à profit pour atteindre l'objectif de capture à la foisnull
etundefined
simultanément. Veuillez consacrer plus de temps à la langue avant de choisir de proposer des réponses incorrectes et trompeuses à des questions qui ont été résolues de manière satisfaisante il y a des années.