Comment vérifier si une clé particulière existe dans un objet ou un tableau JavaScript ?
Si une clé n'existe pas et que j'essaie d'y accéder, le système retournera-t-il false ? Ou lancera-t-il une erreur ?
Comment vérifier si une clé particulière existe dans un objet ou un tableau JavaScript ?
Si une clé n'existe pas et que j'essaie d'y accéder, le système retournera-t-il false ? Ou lancera-t-il une erreur ?
Vérifier l'absence de définition n'est pas un moyen précis de vérifier l'existence d'une clé. Que se passe-t-il si la clé existe mais que la valeur est en réalité undefined
?
var obj = { key: undefined };
obj["key"] !== undefined // false, but the key exists!
Vous devriez plutôt utiliser le in
opérateur :
"key" in obj // true, regardless of the actual value
Si vous voulez vérifier si une clé n'existe pas, n'oubliez pas d'utiliser des parenthèses :
!("key" in obj) // true if "key" doesn't exist in object
!"key" in obj // Do not do this! It is equivalent to "false in obj"
Ou, si vous voulez tester particulièrement les propriétés de l'instance de l'objet (et non les propriétés héritées), utilisez hasOwnProperty
:
obj.hasOwnProperty("key") // true
Pour comparer les performances des méthodes qui sont in
, hasOwnProperty
et la clé est undefined
voir ceci repère
Je suis convaincu qu'il y a des cas d'utilisation pour avoir des propriétés intentionnellement définies comme indéfinies.
Cas d'utilisation valide : Gecko 1.9.1 [Firefox 3.5] ne possède pas la propriété window.onhashchange. Pour Gecko 1.9.2 [Firefox 3.6], cette propriété a la valeur undefined (jusqu'à ce que le hachage change). Pour détecter l'historique du hachage ou la version du navigateur, il faut utiliser window.hasOwnProperty("onhashchange") ;
Fait aléatoire : les propriétés définies comme undefined
ne sera pas sérialisée par JSON.stringify(...)
considérant que null
fait. Ainsi, tout ce qui est défini comme undefined
qui est renvoyée à JSON disparaîtra tout simplement. Vous pouvez également utiliser delete obj.propName
pour supprimer une propriété d'un objet.
Comment vérifier si une clé particulière existe dans un objet ou un tableau JavaScript ? Si une clé n'existe pas et que j'essaie d'y accéder, cela renverra-t-il faux ? Ou une erreur ?
L'accès direct à une propriété manquante en utilisant le style tableau (associatif) ou le style objet renverra un message de type indéfini constant.
Comme on l'a déjà mentionné ici, on peut avoir un objet dont la propriété est associée à une constante "indéfinie".
var bizzareObj = {valid_key: undefined};
Dans ce cas, vous devrez utiliser hasOwnProperty ou sur opérateur pour savoir si la clé est vraiment là. Mais, mais à quel prix ?
alors, je vous dis...
sur opérateur et hasOwnProperty sont des "méthodes" qui utilisent le mécanisme du descripteur de propriété en Javascript (similaire à la réflexion dans le langage Java).
http://www.ecma-international.org/ecma-262/5.1/#sec-8.10
Le type descripteur de propriété est utilisé pour expliquer la manipulation et la réification des attributs de propriété nommés. Les valeurs du type Descripteur de propriété sont des enregistrements composés de champs nommés où le nom de chaque champ est un nom d'attribut et sa valeur est une valeur d'attribut correspondante, comme indiqué au point 8.6.1. En outre, tout champ peut être présent ou absent.
D'autre part, l'appel d'une méthode ou d'une clé d'objet utilisera le mécanisme Javascript [[Get]]. C'est beaucoup plus rapide !
http://jsperf.com/checking-if-a-key-exists-in-a-javascript-array
.
Utilisation de sur opérateur
var result = "Impression" in array;
Le résultat a été
12,931,832 ±0.21% ops/sec 92% slower
Utilisation de hasOwnProperty
var result = array.hasOwnProperty("Impression")
Le résultat a été
16,021,758 ±0.45% ops/sec 91% slower
Accès direct aux éléments (style parenthèses)
var result = array["Impression"] === undefined
Le résultat a été
168,270,439 ±0.13 ops/sec 0.02% slower
Accès direct aux éléments (style objet)
var result = array.Impression === undefined;
Le résultat a été
168,303,172 ±0.20% fastest
undefined
valeur ?Cette question me laisse perplexe. En Javascript, il y a au moins deux références pour les objets absents pour éviter des problèmes comme celui-ci : null
et undefined
.
null
est la valeur primitive qui représente l'absence intentionnelle de toute valeur d'objet, ou en bref, le confirmé le manque de valeur. D'un autre côté, undefined
est une valeur inconnue (non définie). S'il y a une propriété qui sera utilisée plus tard avec une balise approprié valeur considérer utilisation null
au lieu de undefined
car au moment initial, la propriété est confirmé de manquer de valeur.
Comparez :
var a = {1: null};
console.log(a[1] === undefined); // output: false. I know the value at position 1 of a[] is absent and this was by design, i.e.: the value is defined.
console.log(a[0] === undefined); // output: true. I cannot say anything about a[0] value. In this case, the key 0 was not in a[].
éviter les objets avec undefined
valeurs. Vérifiez directement chaque fois que possible et utilisez null
pour initialiser les valeurs des propriétés. Sinon, utilisez la méthode lente in
opérateur ou hasOwnProperty()
méthode.
Comme d'autres l'ont fait remarquer, les versions modernes des moteurs Javascript (à l'exception de firefox) ont modifié l'approche des propriétés d'accès. L'implémentation actuelle est plus lente que la précédente pour ce cas particulier mais la différence entre la clé d'accès et l'objet est négligeable.
Il retournera undefined
.
var aa = {hello: "world"};
alert( aa["hello"] ); // popup box with "world"
alert( aa["goodbye"] ); // popup box with "undefined"
undefined
est une valeur constante spéciale. Vous pouvez donc dire, par exemple
// note the three equal signs so that null won't be equal to undefined
if( aa["goodbye"] === undefined ) {
// do something
}
C'est probablement la meilleure façon de vérifier si des clés manquent. Cependant, comme le souligne un commentaire ci-dessous, il est théoriquement possible que vous souhaitiez que la valeur réelle soit undefined
. Je n'ai jamais eu besoin de le faire et je ne vois pas pourquoi je voudrais le faire, mais par souci d'exhaustivité, vous pouvez utiliser l'attribut in
opérateur
// this works even if you have {"goodbye": undefined}
if( "goodbye" in aa ) {
// do something
}
Oui. Il renvoie une valeur indéfinie, qu'il soit créé en tant qu'objet ou en tant que tableau.
Vous devez utiliser === au lieu de == lorsque vous comparez à undefined, sinon null sera comparé à undefined.
Trois façons de vérifier si une propriété est présente dans un objet javascript :
!!obj.theProperty
true
pour tous, sauf le false
valeurtheProperty
' dans objobj.hasOwnProperty('theProperty')
toString
1 et 2 renverront vrai sur cette méthode, tandis que 3 pourra y renvoyer faux).Référence :
!obj.theProperty échoue lorsque la valeur est indéfinie. Ex : var a = {a : undefined, b : null}; !!a.a **will return false**
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Tout (ou presque) en JavaScript est un objet ou peut être converti en objet. C'est là que naissent les tableaux pseudo-associatifs, comme l'a souligné @PatrickM.
0 votes
Cette référence jsben.ch/#/WqlIl vous donne un aperçu des moyens les plus courants de réaliser ce contrôle.
4 votes
Une solution de rechange rapide, j'opte généralement pour
property.key = property.key || 'some default value'
juste au cas où je voudrais que cette clé existe avec une certaine valeur.0 votes
Juste un avertissement pour ceux qui viendront en 2022 -- MalwareBytes lance des avertissements sur le lien "benchmark" posté par @EscapeNetscape ci-dessus. Il aurait pu être correct en 2016 lorsqu'il a été posté - je suggère de l'éviter maintenant.