2010-10-08 12 views
14

En utilisant JavaScript, comment ne pas détecter 0, mais sinon détecter les chaînes vides ou vides?Cette instruction if ne doit pas détecter 0; uniquement les chaînes vides ou vides

+0

utilisation 'val ===" "' s'assurer que val est une chaîne dans ce second test. – Warty

+1

Je ne sais pas pour vous, mais il est plus facile pour moi de suivre cette phrase de façon logique: "Comment puis-je détecter des chaînes nulles ou vides, mais pas 0". La seule raison pour laquelle je mentionne cela est parce que structurer le code dans l'ordre que vous diriez qu'il peut parfois le rendre plus facile à mettre en œuvre. –

Répondre

19

À partir de votre titre de la question:

if(val === null || val == "") 

Je ne peux voir que vous avez oublié un = lors d'une tentative de stricte-égalité-comparer val avec la chaîne vide:

if(val === null || val === "") 

Test avec Firebug:

>>> 0 === null || 0 == "" 
true 

>>> 0 === null || 0 === "" 
false 

EDIT: voir le commentaire de CMS à la place pour l'explication.

+0

Oh, donc une chaîne vide est la même chose que 0 avec ==? Impair. Merci! – Hamster

+1

Oui; en fait, c'est l'une des principales raisons de préférer '===' à '=='. En raison de la conversion automatique, 'false == 0 ==" "', mais 'false! == 0! ==" "'. – Amber

+1

Bon, bien +1. Un meilleur mot pour * traduit * serait-il * contraint *? (juste en pensant à haute voix) :) – alex

0

Si j'ai bien compris, vous vouliez détecter une chaîne non vide?

function isNonEmptyString(val) { 
    return (typeof val == 'string' && val!=''); 
} 
/* 
    isNonEmptyString(0); // returns false 
    isNonEmptyString(""); // returns false 
    isNonEmptyString(null); // returns false 
    isNonEmptyString("something"); // returns true 
*/ 
18

Si vous voulez détecter toutes les valeurs Falsey sauf zéro:

if (!foo && foo !== 0) 

Donc, ce détectera null, des chaînes vides, false, undefined, etc.

+0

Vous êtes presque là, pourrait aussi bien préciser ce que vous entendez par «etc». – SoEzPz