2010-07-22 5 views
2

Je veux exécuter un code uniquement si le argument[0].recordCount est supérieur à zéro ou n'est pas indéfini. Toutefois, le code est exécuté lorsque l'alerte argument[0].recordCound affiche undefined.test pour undefined dans JavaScript

if(arguments[0].recordCount > 0 && 
    arguments[0].recordCount !== 'undefined') 
{ //if more than 0 records show in bar 

    document.getElementById('totalRecords').innerHTML = 
     arguments[0].recordCount + " Records"; 
} 

Comment puis-je tester pour undefined ici?

Répondre

6

Lorsque en utilisant undefined comme une chaîne que vous devez faire avec l'opérateur typeof.

En outre, vous devriez vérifier si elle est définie avant tout autre contrôle sur la propriété.

if ('undefined' != typeof arguments[0].recordCount && arguments[0].recordCount > 0) 
+0

+1. Probablement l'opérateur '! ==' devrait être utilisé à la place de '! ='? – stakx

+4

stakx: non.'typeof' est garanti pour retourner une chaîne, et vous comparez sa valeur de retour à une autre chaîne, donc ça ira toujours bien, peu importe les habitudes crockfordiennes que vous avez apprises :) –

+0

@stakx - irrelevent. 'typeof' renvoie une chaîne. –

2

undefined est un mot-clé une variable globale avec une valeur constante, l'utiliser sans les guillemets:

if(arguments[0].recordCount > 0 && arguments[0].recordCount !== undefined) 

Mais en réalité, il serait suffisant pour tester uniquement la première condition:

if(arguments[0].recordCount > 0) 

parce que si recordCount est supérieur à zéro, il est défini de toute façon.


Plus commune est de changer les conditions et essai première si elle est définie, afin d'éviter d'éventuelles erreurs dans les tests suivants (pas sûr si cela est nécessaire ici):

if(arguments[0].recordCount !== undefined && arguments[0].recordCount > 0) 
+0

À droite, si vous insistez pour le comparer en tant que chaîne, utilisez '! =' Au lieu de '! =='. Le premier teste simplement la valeur, alors que le second teste ** à la fois ** le type et la valeur. – BalusC

+0

'undefined' est * pas * un mot clé en JavaScript. Cependant, 'typeof (x)' retournera la chaîne '" undefined "' si 'x' n'est pas défini. – stakx

+1

@stakx: Merci d'avoir clarifié. –

1

Pour vérifier une variable à ne pas nulle et non définie,

if(thatVariable) est suffisant si la conversion implicite peut causer des problèmes pour certains cas où thatVariable est une chaîne vide, ou un booléen, ou le numéro 0. Si la conversion implicite est pas le cas pour notre variable, ce qui suit ferait,

if(arguments[0].recordCount && arguments[0].recordCount > 0) 

Mais ce qui suit serait problématique,

if(arguments[0].recordCount !== undefined && arguments[0].recordCount > 0) 

Considérons,

var undefined = 'surprise' //possible since undefined is not a keyword 
if(arguments[0].recordCount !== undefined && arguments[0].recordCount > 0) 

Maintenant, ce 'si' cassera même si recordCount est indéfini.

Encore une chose: if(a != null) vérifie également indéfini en raison de la conversion implicite. Par conséquent, if(a != null && a != undefined) est redondant

Questions connexes