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
Odpowiedz
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.
Ach tak pusty łańcuch jest taki sam jak 0 z ==? Dziwny. Dzięki! – Hamster
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
Dobra, dobra +1. Czy lepsze słowo dla * przetłumaczone * może być * wymuszone *? (tylko myślenie głośno) :) – alex
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
*/
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
Jesteś prawie na miejscu, możesz również wyjaśnić, co masz na myśli przez "etc". – SoEzPz
użyć 'val ===" ", aby upewnić się, że val jest ciągiem znaków w tym drugim teście. – Warty
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. –