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 ""
?
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 ""
?
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 .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)
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 str
jest zmienną.
Wraca false
za null,undefined,0,000,"",false
.
Zwraca true
cią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
typeof
W switch
nie 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 true
do Number
rodzaju 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
;
if
stwierdzeniu.
Próbować:
if (str && str.trim().length) {
//...
}
str.trim().length
zrobię 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 strVar
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ę:
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 === 0
zwraca 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
undefined
Nie 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ć, true
ponieważ jest pusty :)
empty
w tym przypadku jest to nazwa wprowadzająca w błąd.
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 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.length
spowoduje błąd. Powinno byćstr.length === 0
TypeError
If str
jest równe undefined
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:
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 test
jest undefined
lub 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.