Existe-t-il une sorte d'opérateur "pas dans" en JavaScript pour vérifier si une propriété n'existe pas dans un objet? Je n'ai rien trouvé à ce sujet dans Google ou Stack Overflow. Voici un petit extrait de code sur lequel je travaille où j'ai besoin de ce type de fonctionnalité:
var tutorTimes = {};
$(checked).each(function(idx){
id = $(this).attr('class');
if(id in tutorTimes){}
else{
//Rest of my logic will go here
}
});
Comme vous pouvez le voir, je mettrais tout dans la else
déclaration. Il me semble erroné de créer une déclaration if
- else
juste pour utiliser la else
partie.
var id = ...
dans votre fonction.Réponses:
Annulez simplement votre condition et vous obtiendrez la
else
logique à l'intérieur duif
:la source
( ! somekey in someobj )
let keyExists = (key, obj) => key in obj
let hasProperty
"regarde" mieuxComme l'a déjà dit Jordão, niez-le:
Remarque: Le test ci-dessus teste si tutorTimes a une propriété avec le nom spécifié dans id, n'importe où dans la chaîne de prototypes. Par exemple,
"valueOf" in tutorTimes
renvoie true car il est défini dans Object.prototype .Si vous souhaitez tester si une propriété n'existe pas dans l'objet actuel, utilisez hasOwnProperty:
Ou si vous avez une clé hasOwnPropery, vous pouvez utiliser ceci:
la source
if(!tutorTimes.hasOwnProperty('id')) ...
?id
est une variable qui pourrait avoir n'importe quelle valeur,'id'
est une chaîne avec les deux lettres i et d ,hasOwnProperty(id)
vérifie donc si la propriété spécifiée dans la variable id existe ethasOwnProperty('id')
vérifie s'il existe une propriété nommée id.Personnellement je trouve
plus facile à lire que
mais les deux fonctionneront.
la source
Deux possibilités rapides:
ou
la source
'undefined' === typeof xxx
plutôt.undefined
n'est pas un mot réservé et est en fait une variable globale qui peut être écrasée (conduisant à des bogues difficiles à trouver)'foo' in myObj)
myObj['foo']
pourrait exister en tant que propriété et être simplement défini surundefined
(c'est- à -dire avec l'instructionmyObj.foo = undefined
). Si vous voulez vraiment voir si la propriété elle-même n'existe pas, vous avez besoin de la!('foo' in myObj)
notation.myObj.foo === undefined
est beaucoup plus rapide (quoique potentiellement dangereuse): jsperf.com/not-in-vs-is-undefined .=== undefined
. Beaucoup de choses peuvent casser si les gens abusent d'un langage de programmation en faisant des choses comme, par exemple, l'écrasementundefined
en JavaScript. Voir aussi: stackoverflow.com/questions/8783510/…