Quelle est la meilleure façon de vérifier si une propriété d'objet en JavaScript est undefined
?
la source
Quelle est la meilleure façon de vérifier si une propriété d'objet en JavaScript est undefined
?
La façon habituelle de vérifier si la valeur d'une propriété est la valeur spéciale undefined
est la suivante:
if(o.myProperty === undefined) {
alert("myProperty value is the special value `undefined`");
}
Pour vérifier si un objet ne possède pas réellement une telle propriété, et reviendra donc undefined
par défaut lorsque vous essayez d'y accéder:
if(!o.hasOwnProperty('myProperty')) {
alert("myProperty does not exist");
}
Pour vérifier si la valeur associée à un identifiant est la valeur spéciale undefined
, ou si cet identifiant n'a pas été déclaré. Remarque: cette méthode est la seule façon de se référer à un identifiant non déclaré (note: différent d'avoir une valeur de undefined
) sans erreur précoce:
if(typeof myVariable === 'undefined') {
alert('myVariable is either the special value `undefined`, or it has not been declared');
}
Dans les versions de JavaScript antérieures à ECMAScript 5, la propriété nommée "undefined" sur l'objet global était accessible en écriture, et par conséquent une simple vérification foo === undefined
pouvait se comporter de manière inattendue si elle avait été accidentellement redéfinie. En JavaScript moderne, la propriété est en lecture seule.
Cependant, dans JavaScript moderne, "undefined" n'est pas un mot-clé, et donc les variables à l'intérieur des fonctions peuvent être nommées "undefined" et masquer la propriété globale.
Si vous êtes préoccupé par ce cas de bord (peu probable), vous pouvez utiliser l'opérateur void pour obtenir la undefined
valeur spéciale elle-même:
if(myVariable === void 0) {
alert("myVariable is the special value `undefined`");
}
obj !== undefined
maintenant.undefined
utilisé pour être mutable, commeundefined = 1234
ce qui entraînerait des résultats intéressants. Mais après Ecmascript 5, il n'est plus accessible en écriture, nous pouvons donc utiliser la version plus simple. codereadability.com/how-to-check-for-undefined-in-javascriptJe pense qu'il existe un certain nombre de réponses incorrectes à ce sujet. Contrairement à la croyance courante, "non défini" n'est pas un mot clé en JavaScript et peut en fait avoir une valeur qui lui est affectée.
Code correct
La façon la plus robuste d'effectuer ce test est:
Cela retournera toujours le résultat correct et gère même la situation où
myVar
n'est pas déclaré.Code dégénéré. NE PAS UTILISER.
En outre,
myVar === undefined
générera une erreur dans la situation où myVar n'est pas déclaré.la source
=== undefined
déroutant. Oui, vous pouvez l'affecter àundefined
, mais il n'y a aucune raison légitime de le faire et il est prévisible que cela puisse briser votre code. En C, vous pouvez#define true false
, et en Python, vous pouvez attribuer àTrue
etFalse
, mais les gens ne ressentent pas le besoin de concevoir leur code dans ces langages de manière à se protéger contre la possibilité de saboter délibérément leur propre environnement ailleurs dans le code . Pourquoi la possibilité d'attribuer àundefined
mérite-t-elle même d'être envisagée ici?void 0
pour obtenir la valeur quiundefined
pointe vers. Vous pouvez donc le faireif (myVar === void 0)
. le0
n'est pas spécial, vous pouvez littéralement y mettre n'importe quelle expression.undefined
. MDN: undefinedBien qu'il soit vivement recommandé par de nombreuses autres réponses ici,
typeof
c'est un mauvais choix . Il ne doit jamais être utilisé pour vérifier si les variables ont la valeurundefined
, car il agit comme une vérification combinée de la valeurundefined
et si une variable existe. Dans la grande majorité des cas, vous savez quand une variable existe, et voustypeof
introduirez simplement le potentiel d'un échec silencieux si vous faites une faute de frappe dans le nom de la variable ou dans le littéral de chaîne'undefined'
.Donc, à moins que vous ne fassiez de la détection de fonctionnalités², où il y a une incertitude quant à la portée d'un nom donné (comme la vérification en
typeof module !== 'undefined'
tant qu'étape de code spécifique à un environnement CommonJS),typeof
est un choix nuisible lorsqu'il est utilisé sur une variable, et l'option correcte est pour comparer directement la valeur:Voici quelques idées fausses courantes à ce sujet:
que la lecture d'une variable (
var foo
) ou d'un paramètre (nonfunction bar(foo) { … }
appelébar()
) (non appelé ) échouera. Ce n'est tout simplement pas vrai - les variables sans initialisation explicite et les paramètres qui n'ont pas reçu de valeurs deviennent toujoursundefined
, et sont toujours dans la portée.qui
undefined
peut être écrasé. Il y a beaucoup plus à cela.undefined
n'est pas un mot clé en JavaScript. Au lieu de cela, c'est une propriété sur l'objet global avec la valeur Undefined. Cependant, depuis ES5, cette propriété est en lecture seule et non configurable . Aucun navigateur moderne ne permettra de modifier laundefined
propriété, et depuis 2017, cela a été le cas depuis longtemps. Le manque de mode strict n'affecte pas non plusundefined
le comportement de - il fait juste des instructions commeundefined = 5
ne rien faire au lieu de lancer. Comme il ne s'agit pas d'un mot clé, vous pouvez déclarer des variables avec le nomundefined
, et ces variables peuvent être modifiées, ce qui rend ce modèle autrefois commun:plus dangereux que d'utiliser le global
undefined
. Si vous devez être compatible ES3, remplacez-leundefined
parvoid 0
- ne pas y recourirtypeof
. (void
a toujours été un opérateur unaire qui évalue la valeur non définie pour n'importe quel opérande.)Avec la façon dont les variables fonctionnent, il est temps de répondre à la question réelle: les propriétés des objets. Il n'y a aucune raison de jamais utiliser
typeof
pour les propriétés d'objet. L'exception précédente concernant la détection des fonctionnalités ne s'applique pas ici -typeof
n'a qu'un comportement spécial sur les variables, et les expressions qui font référence aux propriétés des objets ne sont pas des variables.Cette:
est toujours exactement équivalent à ceci³:
et en tenant compte des conseils ci-dessus, pour éviter de confondre les lecteurs quant à la raison pour laquelle vous utilisez
typeof
, car il est plus judicieux d'utiliser===
pour vérifier l'égalité, car il pourrait être remanié pour vérifier la valeur d'une variable plus tard, et parce qu'il est tout simplement clair semble mieux, vous devriez toujours utiliser=== undefined
³ ici aussi .Une autre chose à considérer en ce qui concerne les propriétés des objets est de savoir si vous voulez vraiment vérifier
undefined
. Un nom de propriété donné peut être absent sur un objet (produisant la valeurundefined
lors de la lecture), présent sur l'objet lui-même avec la valeurundefined
, présent sur le prototype de l'objet avec la valeurundefined
, ou présent sur l'un de ceux avec une non-undefined
valeur.'key' in obj
vous dira si une clé se trouve n'importe où sur la chaîne de prototype d'un objet etObject.prototype.hasOwnProperty.call(obj, 'key')
vous dira si elle se trouve directement sur l'objet. Je n'entrerai pas dans les détails dans cette réponse sur les prototypes et l'utilisation d'objets comme cartes à chaînes de caractères, car cela est principalement destiné à contrer tous les mauvais conseils dans les autres réponses, quelles que soient les interprétations possibles de la question d'origine. Lire surprototypes d'objets sur MDN pour plus!¹ choix inhabituel d'exemple de nom de variable? c'est du vrai code mort de l'extension NoScript pour Firefox.
² ne présumez pas que ne pas savoir ce qui est dans la portée est bien en général, cependant. vulnérabilité supplémentaire causée par un abus de portée dynamique: Project Zero 1225
³ supposant une fois de plus un environnement ES5 + et qui se
undefined
réfère à laundefined
propriété de l'objet global. remplacervoid 0
autrement.la source
undefined
, masquant celui par défaut. Ce qui, à des fins pratiques, a le même effet que de l'écraser.void 0
pour comparer avec indéfini mais encore une fois - c'est idiot et exagéré.typeof something === "undefined")
dans le code.void 0
c'est (pour une fois) à la fois plus court et plus sûr! C'est une victoire dans mon livre.En JavaScript, il y a null et il n'y a pas de définition . Ils ont des significations différentes.
Marijn Haverbeke déclare, dans son livre en ligne gratuit " Eloquent JavaScript " (c'est moi qui souligne):
Donc, je suppose que la meilleure façon de vérifier si quelque chose n'était pas défini serait:
J'espère que cela t'aides!
Modifier: En réponse à votre modification, les propriétés des objets devraient fonctionner de la même manière.
la source
undefined
est juste une variable qui peut être réassignée par l'utilisateur: l'écritureundefined = 'a';
fera que votre code ne fera plus ce que vous pensez qu'il fait. L'utilisationtypeof
est meilleure et fonctionne également pour les variables (pas seulement les propriétés) qui n'ont pas été déclarées.Qu'est-ce que cela signifie: "propriété d'objet non définie" ?
En fait, cela peut signifier deux choses bien différentes! Premièrement, cela peut signifier la propriété qui n'a jamais été définie dans l'objet et, deuxièmement, cela peut signifier la propriété qui a une valeur indéfinie . Regardons ce code:
Est
o.a
indéfini? Oui! Sa valeur n'est pas définie. Esto.b
indéfini? Sûr! Il n'y a aucune propriété «b» du tout! OK, voyez maintenant comment les différentes approches se comportent dans les deux situations:Nous pouvons clairement voir cela
typeof obj.prop == 'undefined'
etobj.prop === undefined
sont équivalents, et ils ne distinguent pas ces différentes situations. Et'prop' in obj
peut détecter la situation où une propriété n'a pas été définie du tout et ne fait pas attention à la valeur de la propriété qui peut être indéfinie.Alors que faire?
1) Vous voulez savoir si une propriété n'est pas définie par la première ou la deuxième signification (la situation la plus typique).
2) Vous voulez simplement savoir si l'objet a une propriété et ne vous souciez pas de sa valeur.
Remarques:
x.a === undefined
ou celatypeof x.a == 'undefined'
augmenteReferenceError: x is not defined
si x n'est pas défini.undefined
est une variable globale (elle se trouve doncwindow.undefined
dans les navigateurs). Il est pris en charge depuis ECMAScript 1st Edition et depuis ECMAScript 5, il est en lecture seule . Donc, dans les navigateurs modernes, cela ne peut pas être redéfini sur vrai car de nombreux auteurs aiment nous faire peur, mais cela reste vrai pour les navigateurs plus anciens.Combat final:
obj.prop === undefined
vstypeof obj.prop == 'undefined'
Avantages de
obj.prop === undefined
:undefined
Moins de
obj.prop === undefined
:undefined
peut être remplacé dans les anciens navigateursAvantages de
typeof obj.prop == 'undefined'
:Moins de
typeof obj.prop == 'undefined'
:'undefned'
( mal orthographié ) voici juste une constante de chaîne, donc le moteur JavaScript ne peut pas vous aider si vous l'avez mal orthographié comme je viens de le faire.Mise à jour (pour JavaScript côté serveur):
Node.js prend en charge la variable globale
undefined
asglobal.undefined
(elle peut également être utilisée sans le préfixe «global»). Je ne connais pas les autres implémentations de JavaScript côté serveur.la source
undefined
tant que membre deglobal
. De plus,console.log(global);
nifor (var key in global) { ... }
ne s'affiche pas indéfini en tant que membre de global . Mais tester comme'undefined' in global
montrer le contraire.[[Enumerable]]
c'est faux :-)Minuses of typeof obj.prop == 'undefined'
, cela peut être évité en écrivant commetypeof obj.prop == typeof undefined
. Cela donne également une symétrie très agréable.obj.prop === undefined
.if ('foo' in o
)… votre réponse est vraiment la première bonne réponse ici. Presque tout le monde répond à cette phrase.Le problème se résume à trois cas:
undefined
.undefined
.Cela nous dit quelque chose que je considère important:
Il existe une différence entre un membre non défini et un membre défini avec une valeur non définie.
Mais malheureusement,
typeof obj.foo
ne nous dit pas lequel des trois cas nous avons. Cependant, nous pouvons combiner cela avec"foo" in obj
pour distinguer les cas.Il convient de noter que ces tests sont également les mêmes pour les
null
entréesJe dirais que dans certains cas, il est plus logique (et plus clair) de vérifier si la propriété est là, que de vérifier si elle n'est pas définie, et le seul cas où cette vérification sera différente est le cas 2, le rare cas de une entrée réelle dans l'objet avec une valeur non définie.
Par exemple: je viens de refactoriser un tas de code qui avait un tas de vérifications si un objet avait une propriété donnée.
Ce qui était plus clair lorsqu'il était écrit sans vérification pour indéfini.
Mais comme cela a été mentionné, ce ne sont pas exactement les mêmes (mais ils sont plus que suffisants pour mes besoins).
la source
if (!("x" in blob)) {}
avec des crochets autour de l'intérieur, car le! L'opérateur a la priorité sur «in». J'espère que cela aide quelqu'un.a = {b: undefined}
; alorstypeof a.b === typeof a.c === 'undefined'
mais'b' in a
et!('c' in a)
.{ x : undefined }
ajouter ou du moins comme une autre alternative à (2.) dans le tableau - j'ai dû réfléchir un instant pour réaliser que le point (2.) correspond àundefined
(bien que vous en parlez plus tard).Cela a fonctionné pour moi tandis que les autres ne l'ont pas fait.
la source
typeof (something == "undefined")
.(typeof something) === "undefined"
.Je ne sais pas d'où vient l'utilisation de
===
withtypeof
, et comme convention je le vois utilisé dans de nombreuses bibliothèques, mais l'opérateur typeof renvoie un littéral de chaîne, et nous le savons d'avance, alors pourquoi voudriez-vous également taper vérifier aussi?la source
==
nécessite toujours au moins une vérification de type - l'interpréteur ne peut pas comparer les deux opérandes sans connaître d'abord leur type.==
est un caractère de moins que===
:)Crossposting ma réponse à partir d'une question connexe Comment vérifier si "non défini" en JavaScript?
Spécifique à cette question, voir les cas de test avec
someObject.<whatever>
.Quelques scénarios illustrant les résultats des différentes réponses: http://jsfiddle.net/drzaus/UVjM4/
(Notez que l'utilisation de
var
pour lesin
tests fait une différence dans un wrapper de portée)Code de référence:
Et les résultats:
la source
Si tu fais
il échouera lorsque la variable
myvar
n'existe pas, car myvar n'est pas défini, donc le script est cassé et le test n'a aucun effet.Étant donné que l'objet fenêtre a une portée globale (objet par défaut) en dehors d'une fonction, une déclaration sera «attachée» à l'objet fenêtre.
Par exemple:
La variable globale myvar est la même que window.myvar ou window ['myvar']
Pour éviter les erreurs de test lorsqu'une variable globale existe, il vaut mieux utiliser:
La question de savoir si une variable existe vraiment n'a pas d'importance, sa valeur est incorrecte. Sinon, il est stupide d'initialiser des variables avec undefined, et il vaut mieux utiliser la valeur false pour initialiser. Lorsque vous savez que toutes les variables que vous déclarez sont initialisées avec false, vous pouvez simplement vérifier son type ou vous fier
!window.myvar
à vérifier si elle a une valeur correcte / valide. Ainsi, même lorsque la variable n'est pas définie, il en!window.myvar
va de même pourmyvar = undefined
oumyvar = false
oumyvar = 0
.Lorsque vous attendez un type spécifique, testez le type de la variable. Pour accélérer le test d'une condition, il vaut mieux:
Lorsque la première et simple condition est remplie, l'interpréteur ignore les tests suivants.
Il est toujours préférable d'utiliser l'instance / l'objet de la variable pour vérifier si elle a obtenu une valeur valide. Il est plus stable et constitue un meilleur moyen de programmation.
(y)
la source
Je n'ai vu (j'espère pas l'avoir manqué) quiconque vérifier l'objet avant la propriété. C'est donc le plus court et le plus efficace (mais pas forcément le plus clair):
Si obj ou obj.prop est indéfini, nul ou "falsifié", l'instruction if n'exécutera pas le bloc de code. Il s'agit généralement du comportement souhaité dans la plupart des instructions de bloc de code (en JavaScript).
la source
var x = obj && obj.prop || 'default';
Dans l'article Exploring the Abyss of Null and Undefined in JavaScript, j'ai lu que les frameworks comme Underscore.js utilisent cette fonction:
la source
void 0
est juste une courte façon d'écrireundefined
(puisque c'est ce que void suivi de toute expression renvoie), il enregistre 3 caractères. Cela pourrait aussi faire l'affairevar a; return obj === a;
, mais c'est un personnage de plus. :-)void
est un mot réservé, alors qu'ilundefined
n'est pas ie tandis queundefined
est égal àvoid 0
par défaut, vous pouvez assigner une valeur àundefined
egundefined = 1234
.isUndefined(obj)
: 16 caractères.obj === void 0
: 14 caractères. dit-il.Tout simplement, tout n'est pas défini en JavaScript, n'est pas défini , peu importe qu'il s'agisse d'une propriété à l'intérieur d'un objet / tableau ou simplement d'une simple variable ...
JavaScript a
typeof
qui le rend très facile à détecter une variable non définie.Vérifiez simplement si
typeof whatever === 'undefined'
et cela renverra un booléen.C'est ainsi que la célèbre fonction
isUndefined()
d'AngularJs v.1x s'écrit:Donc, comme vous voyez que la fonction reçoit une valeur, si cette valeur est définie, elle retournera
false
, sinon pour les valeurs non définies, retourneratrue
.Voyons donc quels seront les résultats lorsque nous passerons des valeurs, y compris les propriétés des objets comme ci-dessous, voici la liste des variables que nous avons:
et nous les vérifions comme ci-dessous, vous pouvez voir les résultats devant eux sous forme de commentaire:
Comme vous le voyez, nous pouvons tout vérifier en utilisant quelque chose comme ça dans notre code, comme mentionné, vous pouvez simplement l'utiliser
typeof
dans votre code, mais si vous l'utilisez encore et encore, créez une fonction comme l'exemple angulaire que je partage et continue à réutiliser comme suivant le modèle de code DRY.Encore une chose, pour vérifier la propriété d'un objet dans une application réelle dont vous n'êtes pas sûr que l'objet existe ou non, vérifiez si l'objet existe en premier.
Si vous vérifiez une propriété sur un objet et que cet objet n’existe pas, une erreur se produit et l’application entière s'arrête.
Si simple que vous pouvez envelopper une instruction if comme ci-dessous:
Qui est également égal à isDefined dans Angular 1.x ...
D'autres frameworks javascript comme le soulignement ont également une vérification de définition similaire, mais je vous recommande d'utiliser
typeof
si vous n'utilisez déjà aucun framework.J'ajoute également cette section de MDN qui a obtenu des informations utiles sur typeof, undefined et void (0).
plus> ici
la source
' if (window.x) {} ' est protégé contre les erreurs
Vous le souhaitez très probablement
if (window.x)
. Cette vérification est sûre même si x n'a pas été déclaré (var x;
) - le navigateur ne génère pas d'erreur.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 membres, et il est légal d'essayer d'accéder à un membre inexistant. Si x n'a pas été déclaré ou n'a pas été défini,
window.x
retourne undefined . undefined conduit à false lorsque if () l' évalue.la source
typeof history != 'undefined'
fonctionne réellement dans les deux systèmes.En lisant ceci, je suis étonné de ne pas l'avoir vu. J'ai trouvé plusieurs algorithmes qui fonctionneraient pour cela.
Jamais défini
Si la valeur d'un objet n'a jamais été définie, cela empêchera de revenir
true
s'il est défini commenull
ouundefined
. Cela est utile si vous souhaitez que true soit renvoyé pour les valeurs définies commeundefined
Défini comme indéfini ou jamais défini
Si vous voulez que cela résulte comme
true
pour les valeurs définies avec la valeur deundefined
, ou jamais définies, vous pouvez simplement utiliser=== undefined
Défini comme une valeur falsifiée, non défini, nul ou jamais défini.
Généralement, les gens m'ont demandé un algorithme pour déterminer si une valeur est soit fausse
undefined
, soitnull
. Les œuvres suivantes.la source
if (!obj.prop)
var obj = {foo: undefined}; obj.foo === void 0
->true
. Comment est-ce "jamais défini commeundefined
"? C'est faux.la source
Comparez avec
void 0
, pour la concision.Ce n'est pas aussi verbeux que
if (typeof foo !== 'undefined')
la source
foo
n'est pas déclaré.La solution est incorrecte. En JavaScript,
retournera vrai, car ils sont tous les deux "castés" en booléens et sont faux. La bonne façon serait de vérifier
qui est l'opérateur d'identité ...
la source
===
s'agit du type égalité + (égalité primitive | identité d'objet), où les primitives incluent des chaînes. Je pense que la plupart des gens considèrent que ce'abab'.slice(0,2) === 'abab'.slice(2)
n'est pas intuitif si l'on considère===
comme l'opérateur d'identité.Vous pouvez obtenir un tableau non défini avec chemin à l'aide du code suivant.
Lien jsFiddle
la source
getUndefiend
devrait l'êtregetUndefined
.Voici ma situation:
J'utilise le résultat d'un appel REST. Le résultat doit être analysé à partir de JSON vers un objet JavaScript.
Il y a une erreur que je dois défendre. Si les arguments de l'appel de repos étaient incorrects dans la mesure où l'utilisateur spécifiant les arguments de manière incorrecte, l'appel de repos revient essentiellement vide.
En utilisant ce post pour m'aider à me défendre contre cela, j'ai essayé cela.
Pour ma situation, si restResult.data [0] === "objet", alors je peux commencer en toute sécurité à inspecter le reste des membres. Si non défini, lancez l'erreur comme ci-dessus.
Ce que je dis, c'est que pour ma situation, toutes les suggestions ci-dessus dans ce post n'ont pas fonctionné. Je ne dis pas que j'ai raison et que tout le monde a tort. Je ne suis pas du tout un maître JavaScript, mais j'espère que cela aidera quelqu'un.
la source
typeof
garde ne se garde pas réellement contre tout ce qu'une comparaison directe ne pourrait pas gérer. S'ilrestResult
n'est pas défini ou non déclaré, il sera toujours lancé.if(!restResult.data.length) { throw "Some error"; }
Il existe un moyen agréable et élégant d’attribuer une propriété définie à une nouvelle variable si elle est définie ou de lui attribuer une valeur par défaut comme solution de rechange si elle n’est pas définie.
Cela convient si vous avez une fonction, qui reçoit une propriété de configuration supplémentaire:
En cours d'exécution
la source
Toutes les réponses sont incomplètes. C'est la bonne façon de savoir qu'il existe une propriété «définie comme non définie»:
Exemple:
Dommage que cela ait été la bonne réponse est enterré dans de mauvaises réponses> _ <
Donc, pour tous ceux qui passeront, je vous donnerai des indéfinis gratuitement !!
la source
En parcourant les commentaires, pour ceux qui veulent vérifier les deux, c'est indéfini ou sa valeur est nulle:
Si vous utilisez la bibliothèque jQuery,
jQuery.isEmptyObject()
cela suffira dans les deux cas,la source
Si vous utilisez Angular:
Underscore.js:
la source
1
à une variablex
? Ai-je besoin de Underscore ou jQuery? (incroyable que les gens utilisent les bibliothèques même pour les opérations les plus élémentaires comme untypeof
chèque)J'utilise
if (this.variable)
pour tester s'il est défini. Simpleif (variable)
, recommandé ci - dessus , échoue pour moi. Il s'avère que cela ne fonctionne que lorsque la variable est un champ d'un objet,obj.someField
pour vérifier si elle est définie dans le dictionnaire. Mais nous pouvons utiliserthis
ouwindow
comme objet dictionnaire car toute variable est un champ dans la fenêtre actuelle, si je comprends bien. Voici donc un testIl détecte d'abord que la variable
abc
n'est pas définie et elle est définie après l'initialisation.la source
Je propose ici trois façons pour ceux qui attendent des réponses étranges:
isUndefined1:
Essayez d'obtenir une propriété de la valeur d'entrée, vérifiez le message d'erreur s'il existe. Si la valeur d'entrée n'est pas définie, le message d'erreur serait Uncaught TypeError: Impossible de lire la propriété «b» de non défini
isUndefined2:
Convertir la valeur d'entrée en chaîne pour comparer avec
"undefined"
et assurez-vous qu'il s'agit d'une valeur négative.isUndefined3:
Dans js, le paramètre facultatif fonctionne lorsque la valeur d'entrée est exactement
undefined
.la source
ES2019 a introduit une nouvelle fonctionnalité - chaînage facultatif que vous pouvez utiliser pour utiliser une propriété d'un objet uniquement lorsqu'un objet est défini comme ceci:
Il fera référence à la propriété du téléphone uniquement lorsque l'utilisateur et contactDetails sont définis.
Réf. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
la source
Renvoie false si la variable est définie et true si n'est pas défini.
Utilisez ensuite:
la source
typeof
test dans une fonction. Étonnant que 4 personnes aient voté pour cela. -1.Je voudrais vous montrer quelque chose que j'utilise pour protéger la
undefined
variable:Cela interdit à quiconque de modifier la
window.undefined
valeur, détruisant ainsi le code basé sur cette variable. Si vous utilisez"use strict"
, tout ce qui tente de changer sa valeur se terminera par erreur, sinon il serait ignoré en silence.la source
vous pouvez également utiliser Proxy, cela fonctionnera avec les appels imbriqués, mais nécessitera une vérification supplémentaire:
vous allez donc l'utiliser comme:
la source