Widziałem to pytanie , ale nie widziałem konkretnego przykładu w JavaScript. Czy string.EmptyJavaScript jest dostępny w prosty sposób , czy jest to tylko sprawdzenie ""?
Widziałem to pytanie , ale nie widziałem konkretnego przykładu w JavaScript. Czy string.EmptyJavaScript jest dostępny w prosty sposób , czy jest to tylko sprawdzenie ""?
Odpowiedzi:
Jeśli chcesz tylko sprawdzić, czy jest jakaś wartość, możesz to zrobić
if (strValue) {
//do something
}
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).
if (strValue === "") {
//...
}
=== ''vs .lengthnie wykazało zauważalnej poprawy (i używanie .lengthdziała tylko wtedy, gdy możesz założyć, że masz ciąg znaków)
Do sprawdzenia, czy łańcuch jest pusty, pusty lub niezdefiniowany, używam:
function isEmpty(str) {
return (!str || 0 === str.length);
}
Do sprawdzenia, czy łańcuch 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łe znaki:
String.prototype.isEmpty = function() {
return (this.length === 0 || !this.trim());
};
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.html
Wszystkie poprzednie odpowiedzi są dobre, ale będzie jeszcze lepiej. Użyj operatora !!( nie ).
if(!!str){
// Some code here
}
Lub użyj rzutowania typu:
if(Boolean(str)){
// Code here
}
Oba wykonują tę samą funkcję. Wpisz zmienną do Boolean, gdzie strjest zmienną.
Wraca falseza null,undefined,0,000,"",false.
Zwraca trueciąg „0” i białe znaki „”.
if(str)a if(!!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:
if (!str.length) { ...
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.
if(str.replace(/\s/g,"") == ""){
}
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
Używam:
function empty(e) {
switch (e) {
case "":
case 0:
case "0":
case null:
case false:
case typeof(e) == "undefined":
return true;
default:
return false;
}
}
empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
return ""
})) // false
typeofW switchnie działa dla mnie. Dodałem if (typeof e == "undefined")test i to działa. Dlaczego?
case undefined:zamiast case typeof(e) == "undefined":?
Możesz użyć lodash : _.isEmpty (wartość).
Obejmuje ona wiele takich przypadkach {}, '', null, undefined, itd.
Ale ona zawsze wraca truedo Numberrodzaju JavaScript prymitywne typy danych , jak _.isEmpty(10)i _.isEmpty(Number.MAX_VALUE)obu zwrotów true.
_.isEmpty(" "); // => false
" "nie jest pusty. _.isEmpty("");zwraca true.
Funkcjonować:
function is_empty(x)
{
return (
(typeof x == 'undefined')
||
(x == null)
||
(x == false) //same as: !x
||
(x.length == 0)
||
(x == "")
||
(x.replace(/\s/g,"") == "")
||
(!/[^\s]/.test(x))
||
(/^\s*$/.test(x))
);
}
PS: W JavaScript nie używaj podziału linii po return;
ifstwierdzeniu.
Próbować:
if (str && str.trim().length) {
//...
}
str.trim().lengthzrobię to szybciej niż str.trim()o około 1% według moich własnych wyników testów.
if (!str) { ... }
Nie martwiłbym się zbytnio najbardziej wydajną metodą. Użyj tego, co jest najbardziej jasne dla twojej intencji. Dla mnie to zwyklestrVar == "" .
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.
=== . Zwraca prawdę tylko wtedy, gdy strVarjest 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ę:
function empty(str)
{
if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
{
return true;
}
else
{
return false;
}
}
To trochę przesada, wiem.
str.length === 0zwraca true dla każdej funkcji, która nie ma parametrów formalnych.
var a;istniejąprzyciąć false spaces wartość, a następnie sprawdźemptiness
if ((a)&&(a.trim()!=''))
{
// if variable a is not empty do this
}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)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 undefinedNie wszystkie przetestowane metody obsługują wszystkie przypadki wprowadzania danych.
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
Zwykle używam czegoś takiego,
if (!str.length) {
// Do something
}
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:
var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted
Aby przetestować jego nieważność, można zrobić coś takiego:
String.prototype.isNull = function(){
return Boolean(this.match(/^[\0]*$/));
}
...
"\0".isNull() // true
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.).
Tymczasem możemy mieć jedną funkcję, która sprawdza wszystkie „ puste ”, takie jak null, undefined, „”, „”, {}, [] . Właśnie to napisałem.
var isEmpty = function(data) {
if(typeof(data) === 'object'){
if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
return true;
}else if(!data){
return true;
}
return false;
}else if(typeof(data) === 'string'){
if(!data.trim()){
return true;
}
return false;
}else if(typeof(data) === 'undefined'){
return true;
}else{
return false;
}
}
Zastosuj przypadki i wyniki.
console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty(' ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false
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:
// considering the variable in which your string is saved is named str.
if (str && str.length>0) {
// Your code here which you want to run if the string is not empty.
}
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.
let rand = ()=>Math.random(), a następnie rand && 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:
function empty(str){
return !str || !/[^\s]+/.test(str);
}
empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty(" "); // true
Próbka na jsfiddle .
empty(0)i empty(7)powinieneś zwrócić tę samą wartość.
empty("0")musi wrócić false(ponieważ nie jest to pusty ciąg), ale empty(0)musi wrócić, trueponieważ jest pusty :)
emptyw tym przypadku jest to nazwa wprowadzająca w błąd.
emptyto niedokładne i mylące imię. Interesujące jest to, że PHP ma również źle nazwaną emptyfunkcję, 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 sprawdzisz 0, 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
Spróbuj tego
str.value.length == 0
"".value.lengthspowoduje błąd. Powinno byćstr.length === 0
TypeErrorIf strjest równe undefinedlubnull
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:
String.prototype.isEmpty = String.prototype.isEmpty || function() {
return !(!!this.length);
}
W przeciwnym razie, jeśli chcesz sprawdzić zarówno ''pusty ciąg znaków, jak i ' 'spację, możesz to zrobić, dodając trim()coś w rodzaju kodu poniżej:
String.prototype.isEmpty = String.prototype.isEmpty || function() {
return !(!!this.trim().length);
}
i możesz to tak nazwać:
''.isEmpty(); //return true
'alireza'.isEmpty(); //return false
!(!!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.
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.
function IsNullOrEmpty(value)
{
return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
return (value == null || !/\S/.test(value));
}
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:
String.IsNullOrEmpty = function (value) { ... }
Nie chcesz umieszczać go w prototypie ciągów, ponieważ jeśli wystąpienie klasy String ma wartość NULL, wystąpi błąd:
String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error
Testowałem z poniższą tablicą wartości. Możesz go zapętlić, aby sprawdzić swoje funkcje w razie wątpliwości.
// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
['undefined', undefined],
['(var) z', z],
['null', null],
['empty', ''],
['space', ' '],
['tab', '\t'],
['newline', '\n'],
['carriage return', '\r'],
['"\\r\\n"', '\r\n'],
['"\\n\\r"', '\n\r'],
['" \\t \\n "', ' \t \n '],
['" txt \\t test \\n"', ' txt \t test \n'],
['"txt"', "txt"],
['"undefined"', 'undefined'],
['"null"', 'null'],
['"0"', '0'],
['"1"', '1'],
['"1.5"', '1.5'],
['"1,5"', '1,5'], // Valid number in some locales, not in JavaScript
['comma', ','],
['dot', '.'],
['".5"', '.5'],
['0', 0],
['0.0', 0.0],
['1', 1],
['1.5', 1.5],
['NaN', NaN],
['/\S/', /\S/],
['true', true],
['false', false],
['function, returns true', function () { return true; } ],
['function, returns false', function () { return false; } ],
['function, returns null', function () { return null; } ],
['function, returns string', function () { return "test"; } ],
['function, returns undefined', function () { } ],
['MyClass', MyClass],
['new MyClass', new MyClass()],
['empty object', {}],
['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];
Nie ma isEmpty()metody, musisz sprawdzić typ i długość:
if (typeof test === 'string' && test.length === 0){
...
Sprawdzanie typu jest potrzebne, aby uniknąć błędów w czasie wykonywania, gdy testjest undefinedlub null.
Ignorując ciągi białych znaków, możesz użyć tego do sprawdzenia pustych, pustych i niezdefiniowanych:
var obj = {};
(!!obj.str) // Returns false
obj.str = "";
(!!obj.str) // Returns false
obj.str = null;
(!!obj.str) // Returns false
Jest zwięzły i działa dla nieokreślonych właściwości, chociaż nie jest najbardziej czytelny.