Pytanie Jak sprawdzić pusty ciąg w JavaScript?


zobaczyłem to wątek, ale nie widziałem konkretnego przykładu JavaScript. Czy jest prosty? string.Empty dostępne w JavaScript, czy jest to tylko przypadek sprawdzania ""?


2147
2017-09-30 17:17


pochodzenie


tylko FYI, myślę, że najbardziej przydatne API dla klasy String są w Mozilla i zestaw javascript. [elated.com] (elated.com/articles/working-with-strings ) ma samouczek dotyczący wszystkich właściwości, metod, ... Uwaga: link do Mozilli został zaktualizowany do developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... - Gene T


Odpowiedzi:


Jeśli chcesz tylko sprawdzić, czy jest jakaś wartość, możesz to zrobić

if (strValue) {
    //do something
}

Jeśli chcesz sprawdzić konkretnie pusty ciąg znaków powyżej wartości zerowej, myślę, że sprawdzam "" to twój najlepszy zakład, używając === operator (abyś wiedział, że jest to ciąg, z którym się porównujesz).

if (strValue === "") {
    //...
}

2743
2017-09-30 17:20



Testowanie właściwości length może być w rzeczywistości szybsze niż testowanie ciągu znaków przed "", ponieważ interpreter nie będzie musiał tworzyć obiektu String z literału łańcuchowego. - Vincent Robert
@Vincent robi pewne naiwne profilowanie w narzędziach programistycznych Chrome, testowanie === '' vs .length nie wykazały żadnej zauważalnej poprawy (i używania .length działa tylko wtedy, gdy możesz założyć, że masz ciąg) - bdukes
@bdukes, gdy zaczynasz dbać o tego typu mikro-optymalizacje, nie sądzę, że Chrome to przeglądarka, w której masz najwięcej problemów z wydajnością ... - Vincent Robert
Należy pamiętać, że jeśli definicja "pustego łańcucha" obejmuje białe znaki, wówczas takie rozwiązanie nie jest właściwe. Ciąg 1 lub więcej spacji zwraca wartość true powyżej. Jeśli używasz JQuery, możesz po prostu użyć tego: if ($ .trim (ref) .length === 0) - zgodnie z odpowiedzią na podobne pytanie: stackoverflow.com/questions/2031085/... - CodeClimber
Zgodnie z oczekiwaniami .length > 0 jest aktualne o wiele szybciej niż w porównaniu z literałem ciągowym! Sprawdź to jsPerf - Chad


Aby sprawdzić, czy ciąg znaków jest pusty, null lub undefined, używam:

function isEmpty(str) {
    return (!str || 0 === str.length);
}

Aby sprawdzić, czy ciąg znaków jest pusty, zerowy lub niezdefiniowany, używam:

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

Aby sprawdzić, czy ciąg znaków jest pusty lub zawiera tylko białą przestrzeń:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};

903
2017-07-16 01:45



dlaczego 0 === str.length zamiast str.length === 0? - Vincent
@Vincent Warunki są często zapisywane w ten sposób if (variable == constant value) a jeśli zapomnisz "=", wtedy przypisujesz stałą wartość do zmiennej zamiast do testowania. Kod nadal będzie działał, ponieważ możesz przypisać zmienną w if. Tak więc bezpieczniejszym sposobem napisania tego warunku jest odwrócenie stałej wartości i zmiennej. W ten sposób po przetestowaniu kodu zobaczysz błąd (Nieprawidłowy lef-hand strony w przypisaniu). Możesz również użyć czegoś takiego jak JSHint, aby uniemożliwić zadanie w warunkach i być ostrzeżonym podczas pisania. - florian
wstydź to /^\s*$/.test(str) nie jest czytelny - może usunięcie spacji za pomocą prostszego kodu lub regex byłoby lepsze? widzieć stackoverflow.com/questions/6623231/... i również stackoverflow.com/questions/10800355/... - Adrien Be
/^\s*$/.test(str) można zastąpić przez str.trim (). length === 0 - Schadenfreude
@Vincent to tak zwane "Warunki Yoda", jak if blue is the sky. Widzieć dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html - AZ.


Wszystkie powyższe są dobre, ale będzie jeszcze lepiej. posługiwać się !!(nie nie) operator.

if(!!str){
some code here;
}

lub użyj odlewania typu:

if(Boolean(str)){
    codes here;
}

Oba wykonują tę samą funkcję, typ rzucają zmienną na boolean, gdzie str jest zmienną.
Zwroty false dla null,undefined,0,000,"",false.
Zwroty true dla ciągu "0" i spacji "".


225
2018-03-30 13:34



Dlaczego jest to "jeszcze lepiej"? - Mene
Czy jest jakaś różnica między zachowaniem if(str) i if(!!str)? - Peter Olson
@PeterOlson, jeśli próbujesz zapisać zmienną jako boolowską, która sprawdza wiele ciągów dla zawartości, to chcesz to zrobić .. aka var any = (!!str1 && !!str2 && !!str3) obsługa, jeśli jest tam również numer - John Ruddell
To jest rozwiązanie, z którego zawsze korzystam. !!str.trim() aby upewnić się, że ciąg nie składa się tylko z białych znaków. - Dario Oddenino
Nie wygląda na włamywacz, Boolean(str) jest dużo bardziej czytelny i mniej "wtfish". - shinzou


Jeśli chcesz się upewnić, że ciąg nie jest po prostu garstką pustych spacji (zakładam, że jest to sprawdzanie poprawności formularza), musisz wykonać zamianę na spacje.

if(str.replace(/\s/g,"") == ""){
}

88
2017-09-30 23:08



Ale wykonuje zadanie, jeśli faktycznie chcesz przetestować, to ciąg z treścią inną niż kosmiczna. Czy istnieje tańszy sposób na przetestowanie tego? - flash
Co powiesz na właściwość długości? - driAn
Zamiast usuwać wszystkie spacje, dlaczego nie sprawdzić, czy nie ma miejsca? Ma dwie zalety, które może wynieść wcześniej, jeśli istnieje znak spoza przestrzeni, i nie zwraca nowego ciągu, który następnie sprawdzasz. if(str.match(/\S/g)){} - mpen
@Mark FYI, nie potrzebujesz globalnego modyfikatora, ponieważ dopasowanie pierwszego wystąpienia znaku spoza oznaczałoby, że ciąg nie jest pusty: str.match(/\S/) - neezer
Ważne: spowoduje to błędy, jeśli str jest null. - nfechner


Najbliższą rzeczą, którą możesz dostać do str.Empty (pod warunkiem, że str jest ciągiem) jest:

if (!str.length) { ...

75
2017-09-30 19:17





Używam :

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof this == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
  })) // false

44
2017-07-09 18:52



To rozwiązanie jest bardziej agnostyczne. Jedyną funkcją JavaScript, na której się opiera, jest typeof. Jest to więc dobry przykład rozwiązania, którego możesz użyć, gdy nie ufasz implementacjom w różnych przeglądarkach i nie masz czasu na lepsze rozwiązanie. (IE, brak dostępu do Internetu). To jest jak dowód. Nie najczystsze, ale możesz być pewien, że zadziała, nie wiedząc zbyt wiele o JavaScript. - Jeff Davis
Poszedłem jeszcze trochę dalej i przybiłem go z operatorem === dla niezdefiniowanego przypadku. W przeciwnym razie jest to po prostu idealna odpowiedź. - Carlos Alberto Martínez Gadea
The typeof w switch nie działa dla mnie. Dodałem if (typeof e == "undefined") test i to działa. Czemu? - Lucas


var s; // undefined
var s = ""; // ""
s.length // 0

W JavaScript nie ma nic reprezentującego pusty ciąg znaków. Wykonaj kontrolę przeciwko któremuś z nich length (jeśli wiesz, że var zawsze będzie ciągiem znaków) lub przeciw ""


23
2017-09-30 17:42