Vi essa pergunta , mas não vi um exemplo específico de JavaScript. Existe um simples string.Empty
disponível em JavaScript, ou é apenas um caso de verificação ""
?
javascript
null
is-empty
casademora
fonte
fonte
Respostas:
Se você quiser apenas verificar se há algum valor, pode fazer
Se você precisar verificar especificamente se há uma seqüência de caracteres vazia em vez de nulo, acho que fazer uma comparação
""
é a sua melhor aposta, usando o===
operador (para que você saiba que é, de fato, uma sequência com a qual você está comparando).fonte
=== ''
vs.length
não mostrou qualquer melhora perceptível (e usando.length
só funciona se você pode assumir que você tem uma string).length > 0
é realmente muito mais rápido do que comparar com uma string literal! Confira este JSPerfPara verificar se uma string está vazia, nula ou indefinida, eu uso:
Para verificar se uma string está em branco, nula ou indefinida, eu uso:
Para verificar se uma sequência está em branco ou contém apenas espaço em branco:
fonte
if (variable == constant value)
e se você esquecer um '=', estará atribuindo o valor constante à variável em vez de testar. O código ainda funcionará, pois você pode atribuir uma variável em um if. Portanto, uma maneira mais segura de escrever essa condição é reverter o valor constante e a variável. Dessa forma, ao testar seu código, você verá um erro (lado esquerdo esquerdo na atribuição). Você também pode usar algo como JSHint para proibir a atribuição em condições e ser avisado ao escrever uma./^\s*$/.test(str)
não é realmente legível - talvez remover espaços usando código ou regex mais simples seria melhor? consulte stackoverflow.com/questions/6623231/… e também stackoverflow.com/questions/10800355/…if blue is the sky
. Veja dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.htmlTodas as respostas anteriores são boas, mas isso será ainda melhor. Use o operador
!!
( não não ).Ou use a conversão de tipo:
Ambos fazem a mesma função. Crie a variável como Boolean, onde
str
é uma variável.Retorna
false
paranull,undefined,0,000,"",false
.Retorna
true
para a string "0" e espaço em branco "".fonte
if(str)
eif(!!str)
?var any = (!!str1 && !!str2 && !!str3)
manuseamento se houver um número de lá também!!str.trim()
para garantir que a sequência não seja feita apenas de espaços em branco.Boolean(str)
é muito mais legível e menos "wtfish".A coisa mais próxima que você pode chegar
str.Empty
(com a pré-condição de que str é uma String) é:fonte
str.Empty
.Se você precisar se certificar de que a sequência não seja apenas um monte de espaços vazios (suponho que seja para validação de formulário), será necessário substituir os espaços.
fonte
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
Eu uso:
fonte
typeof
noswitch
não funcionou para mim. Eu adicionei umif (typeof e == "undefined")
teste e isso funciona. Por quê?case undefined:
vez decase typeof(e) == "undefined":
?Você pode usar lodash : _.isEmpty (valor).
Ele abrange uma série de casos como
{}
,''
,null
,undefined
, etc.Mas sempre retorna
true
para oNumber
tipo de dados primitivos do JavaScript como_.isEmpty(10)
ou_.isEmpty(Number.MAX_VALUE)
ambos os retornostrue
.fonte
_.isEmpty(" "); // => false
" "
não está vazio._.isEmpty("");
retorna verdadeiro.Função:
PS: No JavaScript, não use quebra de linha depois
return
;fonte
if
declaração.Tentar:
fonte
str.trim().length
fará mais rápido do questr.trim()
, em cerca de 1%, de acordo com o meu próprio resultado de teste.if (!str) { ... }
Não há nada representando uma string vazia no JavaScript. Faça uma verificação contra
length
(se você sabe que o var sempre será uma string) ou contra""
fonte
Eu não me preocuparia muito com o método mais eficiente . Use o que for mais claro para sua intenção. Para mim, isso geralmente é
strVar == ""
.De acordo com o comentário de Constantin , se strVar puder de alguma maneira acabar contendo um valor inteiro 0, então essa seria realmente uma daquelas situações de esclarecimento de intenção.
fonte
===
seria melhor. Ele só retorna true sestrVar
for uma string vazia.Muitas respostas e muitas possibilidades diferentes!
Sem dúvida, para uma implementação rápida e simples, o vencedor é:
if (!str.length) {...}
No entanto, como muitos outros exemplos estão disponíveis. O melhor método funcional para fazer isso, eu sugeriria:
Um pouco excessivo, eu sei.
fonte
str.length === 0
retorna true para qualquer função que não tenha parâmetros formais.Você também pode usar expressões regulares:
Verifica se há strings vazias ou preenchidas com espaço em branco.
fonte
atuação
Realizo testes no macOS v10.13.6 (High Sierra) para 18 soluções escolhidas. O Solutions funciona um pouco diferente (para dados de entrada em maiúsculas), apresentado no snippet abaixo.
Conclusões
!str
,==
,===
elength
são rápidos para todos os navegadores (A, B, C, G, I, J)test
,replace
) echarAt
são mais lentas para todos os navegadores (H, L, M, P)Detalhes
No snippet abaixo, comparo os resultados dos 18 métodos escolhidos, usando diferentes parâmetros de entrada
""
"a"
" "
- string vazia, string com letra e string com espaço[]
{}
f
- matriz, objeto e função0
1
NaN
Infinity
- númerostrue
false
- Boleanonull
undefined
Nem todos os métodos testados suportam todos os casos de entrada.
Mostrar snippet de código
E, em seguida, para todos os métodos
str = ""
, realizo o teste de velocidade dos navegadores Chrome v78.0.0, Safari v13.0.4 e Firefox v71.0.0 - você pode executar testes em sua máquina aquifonte
var a;
existeapare
false spaces
o valor no e teste paraemptiness
fonte
Além disso, caso você considere uma string preenchida com espaço em branco como "vazia".
Você pode testá-lo com esta expressão regular:
fonte
Eu costumo usar algo assim,
fonte
typeof variable != "undefined"
antes de verificar se está vazio.Não notei uma resposta que leve em consideração a possibilidade de caracteres nulos em uma string. Por exemplo, se tivermos uma cadeia de caracteres nula:
Para testar sua nulidade, pode-se fazer algo assim:
Funciona em uma cadeia nula, em uma cadeia vazia e é acessível para todas as cadeias. Além disso, ele pode ser expandido para conter outros caracteres em branco ou em branco do JavaScript (por exemplo, espaço não separável, marca de ordem de bytes, separador de linha / parágrafo etc.).
fonte
Enquanto isso, podemos ter uma função que verifica todos os 'vazios' como nulo, indefinido, '', '', {}, [] . Então eu acabei de escrever isso.
Casos de uso e resultados.
fonte
A partir de agora não há método direto como string.empty para verificar se uma string está vazia ou não. Mas no seu código você pode usar uma verificação de wrapper para uma string vazia como:
Usando isso, você também pode garantir que a sequência não seja indefinida ou nula também. Lembre-se, indefinido, nulo e vazio são três coisas diferentes.
fonte
let rand = ()=>Math.random()
, entãorand && rand.length > 0)
retorna false, mas claramente fn não está "vazio". Ou seja, ele retorna false para qualquer função que não possui parâmetros de formato.Math.random()
retorna um número e não uma string. E essa resposta é sobre strings. ;-)Todas essas respostas são legais.
Mas não posso ter certeza de que a variável é uma string, não contém apenas espaços (isso é importante para mim) e pode conter '0' (string).
Minha versão:
Amostra no jsfiddle .
fonte
empty(0)
eempty(7)
deve retornar o mesmo valor.empty("0")
deve retornarfalse
(porque isso é uma string não vazia), masempty(0)
deve retornartrue
porque ele está vazio :)empty
é um nome enganoso nesse caso.empty
é bom. Nos documentos php para a função vazia :Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.
A diferença entrePHP
e esta função - essa string'0'
não será identificada como vazia.empty
é um nome impreciso e enganoso. É interessante que o PHP também tenha umaempty
função com nomes inadequados , mas as falhas do PHP não têm nada a ver com JavaScript.Não vi uma boa resposta aqui (pelo menos não uma resposta adequada para mim)
Então eu decidi me responder:
value === undefined || value === null || value === "";
Você precisa começar a verificar se está indefinido. Caso contrário, seu método poderá explodir e você poderá verificar se é igual a nulo ou se é uma string vazia.
Você não pode ter !! ou somente
if(value)
porque, se você verificar,0
isso dará uma resposta falsa (0 é falso).Com isso dito, envolva-o em um método como:
public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }
PS .: Você não precisa verificar o typeof , pois ele explodiria e lançaria antes mesmo de entrar no método
fonte
Se for necessário detectar não apenas cadeias vazias, mas também em branco, adicionarei à resposta de Goral:
fonte
Tente isto
fonte
"".value.length
causará um erro. Deveria serstr.length === 0
TypeError
sestr
é igual aundefined
ounull
Você pode adicioná-lo facilmente ao objeto String nativo em JavaScript e reutilizá-lo repetidamente ...
Algo simples, como o código abaixo, pode fazer o trabalho para você, se você quiser verificar
''
cadeias vazias:Caso contrário, se você quiser verificar a
''
sequência vazia e o' '
espaço, faça isso apenas adicionandotrim()
algo como o código abaixo:e você pode chamar assim:
fonte
!(!!this.length)
e não apenas!this
(ou!this.trim()
na segunda opção)? Uma string de comprimento zero já é falsa, os parênteses são redundantes e negá-la três vezes é exatamente o mesmo que negá-la uma vez.Tente o seguinte:
fonte
Eu fiz algumas pesquisas sobre o que acontece se você passar um valor não-string e não-vazio / nulo para uma função testadora. Como muitos sabem, (0 == "") é verdadeiro em JavaScript, mas como 0 é um valor e não é vazio ou nulo, convém testá-lo.
As duas funções a seguir retornam true somente para valores indefinidos, nulos, vazios / espaços em branco e false para todo o resto, como números, booleano, objetos, expressões etc.
Existem exemplos mais complicados, mas são simples e fornecem resultados consistentes. Não há necessidade de testar indefinidamente, pois ele está incluído na verificação (valor == nulo). Você também pode imitar o comportamento do C # adicionando-o ao String assim:
Você não deseja colocá-lo no protótipo Strings, porque se a instância da classe String for nula, ocorrerá um erro:
Eu testei com a seguinte matriz de valores. Você pode fazer um loop para testar suas funções em caso de dúvida.
fonte
Para verificar se é exatamente uma string vazia:
Para verificar se é uma string vazia OU um equivalente lógico para no-value (nulo, indefinido, 0, NaN, false, ...):
fonte
Não há
isEmpty()
método, você precisa verificar o tipo e o comprimento:A verificação de tipo é necessária para evitar erros de tempo de execução quando
test
éundefined
ounull
.fonte
Ignorando cadeias de espaço em branco, você pode usar isso para verificar se há nulos, vazios e indefinidos:
É conciso e funciona para propriedades indefinidas, embora não seja o mais legível.
fonte