Qual é a melhor maneira de testar uma string vazia com o jquery-of-the-box?

229

Qual é a melhor maneira de testar uma string vazia com jquery-of-the-box, ou seja, sem plugins? Eu tentei isso .

Mas não funcionou pelo menos pronto para o uso. Seria bom usar algo que está embutido.

Eu não gostaria de repetir

if (a == null || a=='')

em todos os lugares, se alguns if (isempty(a)) estariam disponíveis.

Martin
fonte

Respostas:

556
if (!a) {
  // is emtpy
}

Para ignorar o espaço em branco para seqüências de caracteres:

if (!a.trim()) {
    // is empty or whitespace
}

Se você precisar de suporte legado (IE8-) para trim(), use $.trimou um polyfill .

David Hellsing
fonte
10
A string vazia @CoffeeAddict é falsa em javascript; portanto, sim, a expressão é avaliada como verdadeira se afor "" ou qualquer outro valor falso (nulo, falso, indefinido, 0, NaN).
9118 David Hellsing #
21
Se você também precisa combinar strings com apenas espaço em branco, é uma boa ideia usar #if (!$.trim(a))
Ilari Kajaste
3
Na minha experiência, na grande maioria das vezes que você deseja executar este teste, também deseja incluir testes para espaços em branco. Como esse é o caso usual, o OP deve incluir em sua resposta o comentário de @IlariKajaste
Bane
17
A resposta aceita irá falhar quando uma entrada de 0, no entanto ele vai trabalhar para 1, 2, 3, 4 etc.
Steven
5
Não é if (!a.trim())um pouco perigoso? E se afor indefinido ou nulo?
Timo
27

O link que você deu parece estar tentando algo diferente do teste que você está tentando evitar repetir.

if (a == null || a=='')

testa se a sequência é uma sequência vazia ou nula. O artigo ao qual você vinculou testa se a sequência consiste inteiramente em espaço em branco (ou está vazio).

O teste que você descreveu pode ser substituído por:

if (!a)

Como no javascript, uma sequência vazia e nula, ambas são avaliadas como falsas em um contexto booleano.

SpoonMeiser
fonte
if(!a)não falhará para uma string que consiste em digamos 4 espaços? ``
KNU
@KNU Sim, mas a pergunta é sobre uma sequência vazia, e uma sequência composta por espaços não é uma sequência vazia. Veja o que escrevi sobre a diferença entre o que foi perguntado e o que o código vinculado faz
SpoonMeiser
Esta resposta está errada. Ele trata '0' como uma string vazia, o que não é.
John Henckel 21/10
@ JohnHenckel: Ele será tratado 0como uma string vazia, mas não "0". Presumo que foi isso que você quis dizer? É possível que isso esteja sendo usado em uma situação em que você saiba que aé uma sequência ou nula, mas sim. Algo para estar ciente.
SpoonMeiser
25

Com base na resposta de David, eu pessoalmente gosto de verificar primeiro o objeto em questão, se é uma string. Caso contrário, chamar .trim()um objeto não existente geraria uma exceção:

function isEmpty(value) {
  return typeof value == 'string' && !value.trim() || typeof value == 'undefined' || value === null;
}

Uso:

isEmpty(undefined); // true
isEmpty(null); // true
isEmpty(''); // true
isEmpty('foo'); // false
isEmpty(1); // false
isEmpty(0); // false
Timo
fonte
i verificar com <br /> <p> </ p> de textarea e disse não esvaziar como deveria
kreamik
5

Verifique se os dados são uma sequência vazia (e ignore qualquer espaço em branco) com o jQuery:

function isBlank( data ) {
    return ( $.trim(data).length == 0 );
}
Sjoerd Linders
fonte
5

Para verificar todos os 'vazios' como nulo, indefinido, '', '', {}, [] .

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;
    }
}

Casos de uso e resultados.

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
Imran Ahmad
fonte
3
if(!my_string){ 
// stuff 
}

e

if(my_string !== "")

se você deseja aceitar nulo, mas rejeitar vazio

EDIT: woops, esqueceu sua condição é se estiver vazio

Greg
fonte
2

Tente executar isso no console do navegador ou em um repl do node.js.

var string = ' ';
string ? true : false;
//-> true

string = '';
string ? true : false;
//-> false

Portanto, uma simples construção de ramificação será suficiente para o teste.

if(string) {
    // string is not empty
}
Harry Love
fonte
1
é melhor dizer "!! string" em vez de "string? true: false" ou mesmo apenas "string".
217142Preço: R $
2

Como você também pode inserir números e cadeias de caracteres fixas, a resposta deve ser:

function isBlank(value) {
  return $.trim(value);
}
Steven
fonte
Não deveria ser assim? return !!$.trim(value);
wonsuc 18/06
-1

Tente isto

if(!a || a.length === 0)
Atif Aziz
fonte
O OP declarou especificamente que eles estavam procurando uma alternativa para isso.
Wayne
-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}
Amarjeet Chaani
fonte
Se a é nullentão a.trim()falharia. Esta é uma má ordem para verificar as coisas. E se você alterar a ordem, sua resposta não fornecerá nada que não tenha sido sugerido antes.
Mike Scotty