2010-10-08 8 views
14

Używając JavaScript, jak NIE wykryć 0, ale w inny sposób wykryć puste lub puste ciągi znaków?Ta instrukcja if nie powinna wykrywać 0; tylko puste lub puste ciągi znaków

+0

użyć 'val ===" ", aby upewnić się, że val jest ciągiem znaków w tym drugim teście. – Warty

+1

Nie wiem jak wy, ale łatwiej mi logicznie podążać za tym zdaniem: "Jak wykryć puste lub puste ciągi, ale nie 0". Jedynym powodem, dla którego o tym wspominam, jest struktura kodu w kolejności, w której powiedziałbyś, że czasami może być łatwiejsza do zaimplementowania. –

Odpowiedz

19

Od tytule pytanie:

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

widzę tylko, że zapomnieli = podczas próby ścisłego-równości-porównać val z pustym ciągiem:

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

testowanie z Firebug:

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

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

EDYCJA: zobacz komentarz CMS zamiast wyjaśnienia.

+0

Ach tak pusty łańcuch jest taki sam jak 0 z ==? Dziwny. Dzięki! – Hamster

+1

Tak; w rzeczywistości jest to jeden z największych powodów, dla których preferujemy '===' nad '=='. Ze względu na automatyczną konwersję, 'false == 0 ==" "', ale 'false! == 0! ==" ". – Amber

+1

Dobra, dobra +1. Czy lepsze słowo dla * przetłumaczone * może być * wymuszone *? (tylko myślenie głośno) :) – alex

0

Jeśli dobrze zrozumiałem, chciałeś wykryć niepusty ciąg znaków?

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

Jeśli chcesz, aby wykryć wszystkie wartości falsey wyjątkiem zera:

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

Więc będzie to wykryć null, puste struny, false, undefined itd

+0

Jesteś prawie na miejscu, możesz również wyjaśnić, co masz na myśli przez "etc". – SoEzPz