2010-04-20 4 views
24

J'essaie de tester si une variable Javascript n'est pas définie.La valeur du tableau Javascript est indéfinie ... comment puis-je tester cela

Vous verrez que je ne m'attends pas à ce que la valeur de predQuery [preId] soit "indéfinie" si je ne reçois pas d'alerte disant "its unbelievable". Mais je le fais souvent, donc je devine que ma déclaration

predQuery[preId]=='undefined') 

ne correspond pas correctement aux éléments non définis.

if((predQuery.length < preId) || (predQuery[preId]=="") || (predQuery[preId]=='undefined')){ 
    alert("its unbelievable"); 
    alert(predQuery[preId]); 
    queryPreds[variables] = preId; 
    queryObjs[variables] = objId; 
    predQuery[preId] = variables; 
} 
else { 
    alert(predQuery[preId]); 
    var predIndex = predQuery[preId]; 
    queryPreds[predIndex] = preId; 
    queryObjs[predIndex] = objId; 
} 

Je peux ajouter plus de code si nécessaire.

+0

Je l'ai utilisé (typeof (predQuery [preId]) == 'undefined') comme mon article dans mon si déclaration. – Ankur

+0

Si c'est le cas, cela ne s'affiche pas. – deceze

+0

@deceze ... Je voulais dire, j'ai changé mon code. Je n'ai pas édité la question cependant car cela n'aidera pas les personnes futures avec le même problème. – Ankur

Répondre

55

array[index] == 'undefined' compare la valeur de l'indice de tableau à la chaîne « non défini ».
Vous recherchez probablement typeof array[index] == 'undefined', qui compare le type.

+3

+1 comparant avec le type immuable au lieu du mutable 'undefined' –

+2

Ceci seul ne peut pas distinguer entre' [undefined] [0] 'et' [] [0] '. S'il y a des chances que votre tableau soit vide, vous rencontrerez probablement ce scénario. – sighrobot

1

Vérifier

if (predQuery[preId] === undefined) 

Utilisez le strict égal à l'opérateur. Voir comparison operators

+1

presque - mais la meilleure pratique est comme dit deceze, comparer typeof parce que cela ne peut pas être redéfini comme indéfini peut être. –

+1

Non infaillible, car indéfini peut être défini. Simplement avec 'window.undefined =" lolz ";' – Warty

+5

Il est impossible d'écrire du JavaScript qui protège contre toute redéfinition interne (presque tout peut être). Je ne préconise pas de rendre le code moins lisible juste pour éviter les redéfinitions. 'typeof' a une autre utilisation, pour détecter les types de données dans les scripts inter-fenêtres, mais cela ne s'applique pas à' undefined' de toute façon. – bobince

1

essayer: typeof(predQuery[preId])=='undefined'
ou plus généralement: typeof(yourArray[yourIndex])=='undefined'
Vous comparez "undefined" undefined, qui retourne false =)

10

Vous le vérifier l'index du tableau contient une chaîne "undefined", vous devez soit utilisez l'opérateur typeof:

typeof predQuery[preId] == 'undefined' 

Ou utilisez la propriété globale undefined:

predQuery[preId] === undefined 

La première est plus sûr, parce que la propriété globale undefined est inscriptible, et il peut être modifié à toute autre valeur.

4

Il y a plus (beaucoup) façons de Rome:

//=>considering predQuery[preId] is undefined: 
predQuery[preId] === undefined; //=> true 
undefined === predQuery[preId] //=> true 
predQuery[preId] || 'it\'s unbelievable!' //=> it's unbelievable 
var isdef = predQuery[preId] ? predQuery[preId] : null //=> isdef = null 

acclamations!

6
predQuery[preId]=='undefined' 

Vous testez contre la chaîne 'undefined'; vous avez confondu ce test avec le test typeof qui retournerait une chaîne. Vous voulez dire probablement être tester contre la valeur spéciale undefined:

predQuery[preId]===undefined 

Notez le opérateur strict égalité pour éviter le match généralement indésirable null==undefined.

Cependant, il y a deux façons dont vous pouvez obtenir une valeur undefined: soit preId est pas membre de predQuery, ou il est un membre, mais a une valeur définie à la valeur undefined spéciale.Souvent, vous voulez seulement vérifier s'il est présent ou non; dans ce cas, l'opérateur in est plus approprié:

!(preId in predQuery) 
0

Ce code fonctionne très bien

function isUndefined(array, index) { 
    return ((String(array[index]) == "undefined") ? "Yes" : "No"); 
} 
+1

Pourquoi utilisez-vous == au lieu de ===? – leofontes