Widziałem to pytanie , ale nie widziałem konkretnego przykładu w JavaScript. Czy string.Empty
JavaScript jest dostępny w prosty sposób , czy jest to tylko sprawdzenie ""
?
javascript
null
is-empty
casademora
źródło
źródło
Odpowiedzi:
Jeśli chcesz tylko sprawdzić, czy jest jakaś wartość, możesz to zrobić
Jeśli trzeba sprawdzić specjalnie dla pusty ciąg nad null, to myślę sprawdzaniu
""
jest najlepszy, korzystając z===
operatora (tak, że wiesz, że to jest w rzeczywistości ciąg jesteś porównując przeciw).źródło
=== ''
vs.length
nie wykazało zauważalnej poprawy (i używanie.length
działa tylko wtedy, gdy możesz założyć, że masz ciąg znaków).length > 0
jest znacznie szybszy niż w porównaniu do literału łańcuchowego! Sprawdź to jsPerfDo sprawdzenia, czy łańcuch jest pusty, pusty lub niezdefiniowany, używam:
Do sprawdzenia, czy łańcuch jest pusty, zerowy lub niezdefiniowany, używam:
Aby sprawdzić, czy ciąg znaków jest pusty lub zawiera tylko białe znaki:
źródło
if (variable == constant value)
a jeśli zapomnisz „=”, zamiast testowania przypisujesz stałą wartość do zmiennej. Kod nadal będzie działał, ponieważ możesz przypisać zmienną w if. Bezpieczniejszym sposobem zapisania tego warunku jest odwrócenie stałej wartości i zmiennej. W ten sposób podczas testowania kodu zobaczysz błąd (niepoprawne przypisanie lewej strony). Możesz także użyć czegoś takiego jak JSHint, aby zabronić przypisywania w warunkach i być ostrzeżonym, gdy je napiszesz./^\s*$/.test(str)
tak naprawdę nie jest czytelny - może lepiej byłoby usunąć spacje za pomocą prostszego kodu lub wyrażenia regularnego? patrz stackoverflow.com/questions/6623231/… oraz stackoverflow.com/questions/10800355/…if blue is the sky
. Zobacz dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.htmlWszystkie poprzednie odpowiedzi są dobre, ale będzie jeszcze lepiej. Użyj operatora
!!
( nie ).Lub użyj rzutowania typu:
Oba wykonują tę samą funkcję. Wpisz zmienną do Boolean, gdzie
str
jest zmienną.Wraca
false
zanull,undefined,0,000,"",false
.Zwraca
true
ciąg „0” i białe znaki „”.źródło
if(str)
aif(!!str)
?var any = (!!str1 && !!str2 && !!str3)
jeśli jest tam również liczba!!str.trim()
aby upewnić się, że łańcuch nie jest utworzony tylko z białych znaków.Boolean(str)
jest o wiele bardziej czytelny i mniej „wtfish”.Najbliższą rzeczą, jaką można uzyskać
str.Empty
(pod warunkiem, że str jest ciągiem znaków) jest:źródło
str.Empty
.Jeśli musisz się upewnić, że ciąg nie jest tylko garstką pustych spacji (zakładam, że jest to do sprawdzania poprawności formularza), musisz wykonać zamianę na spacje.
źródło
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
Używam:
źródło
typeof
Wswitch
nie działa dla mnie. Dodałemif (typeof e == "undefined")
test i to działa. Dlaczego?case undefined:
zamiastcase typeof(e) == "undefined":
?Możesz użyć lodash : _.isEmpty (wartość).
Obejmuje ona wiele takich przypadkach
{}
,''
,null
,undefined
, itd.Ale ona zawsze wraca
true
doNumber
rodzaju JavaScript prymitywne typy danych , jak_.isEmpty(10)
i_.isEmpty(Number.MAX_VALUE)
obu zwrotówtrue
.źródło
_.isEmpty(" "); // => false
" "
nie jest pusty._.isEmpty("");
zwraca true.Funkcjonować:
PS: W JavaScript nie używaj podziału linii po
return
;źródło
if
stwierdzeniu.Próbować:
źródło
str.trim().length
zrobię to szybciej niżstr.trim()
o około 1% według moich własnych wyników testów.if (!str) { ... }
W JavaScript nie ma nic reprezentującego pusty ciąg znaków. Wykonaj sprawdzenie przeciwko
length
(jeśli wiesz, że var zawsze będzie ciągiem) lub przeciwko""
źródło
Nie martwiłbym się zbytnio najbardziej wydajną metodą. Użyj tego, co jest najbardziej jasne dla twojej intencji. Dla mnie to zwykle
strVar == ""
.Zgodnie z komentarzem Constantina , jeśli strVar mógłby w jakiś sposób zawierać wartość całkowitą 0, to rzeczywiście byłaby to jedna z tych sytuacji wyjaśniających zamiary.
źródło
===
. Zwraca prawdę tylko wtedy, gdystrVar
jest pustym ciągiem.Wiele odpowiedzi i wiele różnych możliwości!
Bez wątpienia zwycięzcą jest szybkie i proste wdrożenie:
if (!str.length) {...}
Jednak dostępnych jest wiele innych przykładów. Najlepsza funkcjonalna metoda na to, sugeruję:
To trochę przesada, wiem.
źródło
str.length === 0
zwraca true dla każdej funkcji, która nie ma parametrów formalnych.Możesz także użyć wyrażeń regularnych:
Sprawdza ciągi znaków, które są puste lub wypełnione białymi spacjami.
źródło
var a;
istniejąprzyciąć
false spaces
wartość, a następnie sprawdźemptiness
źródło
Wydajność
Testy przeprowadzam na macOS 10.13.6 (High Sierra) dla 18 wybranych rozwiązań. Rozwiązania działają nieco inaczej (w przypadku danych wejściowych z narożników), co zostało przedstawione w poniższym fragmencie.
Wnioski
!str
,==
,===
ilength
jest szybki dla przeglądarki (A, B, C, G, I, J)test
,replace
) icharAt
są najwolniejsze dla wszystkich przeglądarek (H, L, M, P)Detale
W poniższym fragmencie porównuję wyniki wybranych 18 metod przy użyciu różnych parametrów wejściowych
""
"a"
" "
- pusty ciąg, ciąg z literą i ciąg ze spacją[]
{}
f
- tablica, obiekt i funkcja0
1
NaN
Infinity
- liczbytrue
false
- Booleannull
undefined
Nie wszystkie przetestowane metody obsługują wszystkie przypadki wprowadzania danych.
Pokaż fragment kodu
A następnie dla wszystkich metod wykonuję przypadek testowy prędkości
str = ""
dla przeglądarek Chrome, Safari v13.0.4 v78.0.0 i Firefox v71.0.0 - można uruchomić testy na komputerze tutajźródło
Ponadto w przypadku, gdy uważasz ciąg wypełniony białymi znakami za „pusty”.
Możesz to przetestować za pomocą tego wyrażenia regularnego:
źródło
Zwykle używam czegoś takiego,
źródło
typeof variable != "undefined"
przed sprawdzeniem, czy jest pusty.Nie zauważyłem odpowiedzi, która uwzględnia możliwość wystąpienia pustych znaków w ciągu. Na przykład, jeśli mamy ciąg znaków o wartości zerowej:
Aby przetestować jego nieważność, można zrobić coś takiego:
Działa na łańcuch zerowy i na pusty łańcuch i jest dostępny dla wszystkich łańcuchów. Ponadto można go rozszerzyć, aby zawierał inne znaki JavaScript puste lub spacje (tj. Spację nierozdzielającą, znak kolejności bajtów, separator wierszy / akapitów itp.).
źródło
Tymczasem możemy mieć jedną funkcję, która sprawdza wszystkie „ puste ”, takie jak null, undefined, „”, „”, {}, [] . Właśnie to napisałem.
Zastosuj przypadki i wyniki.
źródło
W tej chwili nie ma bezpośredniej metody, takiej jak string.empty, aby sprawdzić, czy łańcuch jest pusty, czy nie. Ale w kodzie możesz użyć kontroli opakowania dla pustego ciągu, takiego jak:
Korzystając z tego, możesz również upewnić się, że łańcuch nie jest niezdefiniowany lub również zerowy. Pamiętaj, niezdefiniowane, puste i puste to trzy różne rzeczy.
źródło
let rand = ()=>Math.random()
, a następnierand && rand.length > 0)
zwraca false, ale wyraźnie fn nie jest „pusty”. Czyli zwraca false dla każdej funkcji, która nie ma parametrów formatu.Math.random()
zwraca liczbę, a nie ciąg znaków. Ta odpowiedź dotyczy ciągów znaków. ;-)Wszystkie te odpowiedzi są miłe.
Ale nie mogę być pewien, że zmienna jest ciągiem, nie zawiera tylko spacji (jest to dla mnie ważne) i może zawierać „0” (ciąg).
Moja wersja:
Próbka na jsfiddle .
źródło
empty(0)
iempty(7)
powinieneś zwrócić tę samą wartość.empty("0")
musi wrócićfalse
(ponieważ nie jest to pusty ciąg), aleempty(0)
musi wrócić,true
ponieważ jest pusty :)empty
w tym przypadku jest to nazwa wprowadzająca w błąd.empty
jest dobra. W dokumentach php dla pustej funkcji:Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.
Różnica międzyPHP
i tą funkcją - ten ciąg'0'
nie zostanie zidentyfikowany jako pusty.empty
to niedokładne i mylące imię. Interesujące jest to, że PHP ma również źle nazwanąempty
funkcję, ale błędy PHP nie mają nic wspólnego z JavaScript.Nie widziałem tutaj dobrej odpowiedzi (a przynajmniej takiej, która nie pasuje do mnie)
Postanowiłem więc odpowiedzieć sobie:
value === undefined || value === null || value === "";
Musisz zacząć sprawdzać, czy jest niezdefiniowany. W przeciwnym razie twoja metoda może wybuchnąć, a następnie możesz sprawdzić, czy jest równa null lub jest równa pustemu ciągowi.
Nie możesz mieć !! lub tylko
if(value)
dlatego, że jeśli sprawdzisz0
, da ci fałszywą odpowiedź (0 to fałsz).Powiedziawszy to, zawiń to w metodę taką jak:
public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }
PS .: Nie musisz sprawdzać typeof , ponieważ wybuchłby i rzuciłby jeszcze zanim wejdzie do metody
źródło
Jeśli trzeba wykryć nie tylko puste, ale i puste ciągi, dodam do odpowiedzi Górala:
źródło
Spróbuj tego
źródło
"".value.length
spowoduje błąd. Powinno byćstr.length === 0
TypeError
Ifstr
jest równeundefined
lubnull
Możesz łatwo dodać go do natywnego obiektu String w JavaScript i używać go w kółko ...
Coś prostego, takiego jak poniższy kod, może wykonać zadanie, jeśli chcesz sprawdzić
''
puste ciągi:W przeciwnym razie, jeśli chcesz sprawdzić zarówno
''
pusty ciąg znaków, jak i' '
spację, możesz to zrobić, dodająctrim()
coś w rodzaju kodu poniżej:i możesz to tak nazwać:
źródło
!(!!this.length)
a nie tylko!this
(lub!this.trim()
druga opcja)? Ciąg o zerowej długości jest już fałszem, nawiasy są zbędne, a trzykrotne negowanie jest dokładnie takie samo, jak jednokrotne zanegowanie.Spróbuj tego:
źródło
Zrobiłem kilka badań na temat tego, co się stanie, jeśli przekażesz wartość nie-łańcuchową i niepustą / zerową do funkcji testera. Jak wielu wie, (0 == "") jest prawdziwe w JavaScript, ale ponieważ 0 jest wartością, a nie pustą lub zerową, możesz chcieć ją przetestować.
Poniższe dwie funkcje zwracają wartość true tylko dla wartości niezdefiniowanych, pustych, pustych / białych i wartość false dla wszystkich innych elementów, takich jak liczby, wartości logiczne, obiekty, wyrażenia itp.
Istnieją bardziej skomplikowane przykłady, ale są one proste i dają spójne wyniki. Nie ma potrzeby testowania pod kątem niezdefiniowanej wartości, ponieważ jest ona uwzględniona w sprawdzaniu (wartość == null). Możesz także naśladować zachowanie C # , dodając je do ciągu w następujący sposób:
Nie chcesz umieszczać go w prototypie ciągów, ponieważ jeśli wystąpienie klasy String ma wartość NULL, wystąpi błąd:
Testowałem z poniższą tablicą wartości. Możesz go zapętlić, aby sprawdzić swoje funkcje w razie wątpliwości.
źródło
Aby sprawdzić, czy jest to dokładnie pusty ciąg:
Aby sprawdzić, czy jest to pusty ciąg LUB logiczny odpowiednik braku wartości (null, undefined, 0, NaN, false, ...):
źródło
Nie ma
isEmpty()
metody, musisz sprawdzić typ i długość:Sprawdzanie typu jest potrzebne, aby uniknąć błędów w czasie wykonywania, gdy
test
jestundefined
lubnull
.źródło
Ignorując ciągi białych znaków, możesz użyć tego do sprawdzenia pustych, pustych i niezdefiniowanych:
Jest zwięzły i działa dla nieokreślonych właściwości, chociaż nie jest najbardziej czytelny.
źródło