2009-02-25 12 views

Répondre

13

Juste pour ajouter quelques précisions.

Si vous voulez vérifier si la propriété existe même si elle est vide, vous devez absolument utiliser hasOwnProperty:

var propertyExists:Boolean = node.hasOwnProperty('@hasCover'); 

Vérification de la longueur du contenu est en quelque sorte sale et renvoie false si la valeur de l'attribut est vide. Vous pouvez même avoir une erreur d'exécution lancée car vous essayez d'accéder à une propriété (longueur) sur un objet nul (hasCover) au cas où l'attribut n'existe pas.

Si vous voulez tester si la propriété existe et la valeur est définie, vous devriez essayer les deux commençant par la hasOwnProperty pour que le test de valeur (éventuelle erreur d'exécution) est ignorée dans le cas où l'attribut n'existe pas :..

var propertyExistsAndContainsValue:Boolean = (node.hasOwnProperty('@hasCover') && [email protected]()); 
+0

nœud. @ HasCover.length() devrait vérifier la longueur de la XMLList renvoyée par le noeud. @ hasCover, pas la longueur de la valeur String de l'attribut hasCover. Je dis "devrait", parce que nous rencontrons ici la conversion de type automatique méchant construit en E4X. Pour vérifier la longueur de la valeur d'attribut, j'utiliserais node. @ HasCover [0] .length. Cela s'assure que nous obtenons la première valeur dans le XMLList retourné, puis utilise la propriété String.length pour vérifier la longueur du contenu. –

6

Ok - je suis tombé sur aujourd'hui et a) il a été utilisé par Ely Greenfield et b) il est douloureusement simple, donc je dois le marquer comme la réponse à moins que quelqu'un puisse le site une raison de ne pas. ..

if("@property" in node){//do something} 
+1

Certainement le chemin à parcourir. Notre plate-forme entière (Mockingbird) est construite sur des documents XML et c'est ainsi que je vérifie que les attributs (ou éléments enfants) existent. Je crois que c'est byte-code-équivalent à hasOwnProperty mais semble beaucoup plus lisible (à mon avis). –

Questions connexes