¿Cuál es la mejor manera de probar una cadena vacía con jquery-out-of-the-box?

229

¿Cuál es la mejor manera de probar una cadena vacía con jquery-out-of-the-box, es decir, sin complementos? Probé esto .

Pero no funcionó al menos fuera de la caja. Sería bueno usar algo que esté incorporado.

No me gustaria repetir

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

en todas partes si if (isempty(a)) hubiera alguna disponible.

Martín
fuente

Respuestas:

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

Para ignorar el espacio en blanco para las cadenas:

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

Si necesita soporte heredado (IE8-) para trim(), use $.trimo un polyfill .

David Hellsing
fuente
10
La cadena vacía @CoffeeAddict es falsa en javascript, por lo que sí, la expresión se evalúa como verdadera si aes "" o cualquier otro valor falso (nulo, falso, indefinido, 0, NaN).
David Hellsing
21
Si necesita if (!$.trim(a))
unir
3
En mi experiencia, la gran mayoría de las veces que desea ejecutar esta prueba también quiere que incluya pruebas de espacios en blanco. Como ese es el caso habitual, OP debe incluir en su respuesta el comentario de @IlariKajaste
Bane
17
La respuesta aceptada fallará cuando ingrese un 0, sin embargo, funcionará para 1, 2, 3, 4, etc.
Steven
55
¿No es if (!a.trim())un poco peligroso? ¿Qué pasa si aes indefinido o nulo?
Timo
27

El enlace que proporcionó parece estar intentando algo diferente a la prueba que está tratando de evitar repetir.

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

prueba si la cadena es una cadena vacía o nula. El artículo que vinculó a las pruebas si la cadena se compone completamente de espacios en blanco (o está vacía).

La prueba que describió se puede reemplazar por:

if (!a)

Porque en javascript, una cadena vacía y nula, ambas se evalúan como falsas en un contexto booleano.

SpoonMeiser
fuente
if(!a)¿No fallará para una cadena que consiste en decir 4 espacios? ``
KNU
@KNU Sí, pero la pregunta se refiere a una cadena vacía, y una cadena compuesta por espacios no es una cadena vacía. Vea lo que escribí sobre la diferencia entre lo que se le preguntó y lo que hace el código vinculado
SpoonMeiser
Esta respuesta es incorrecta. Trata '0' como una cadena vacía, que no lo es.
John Henckel
@ JohnHenckel: se tratará 0como una cadena vacía, pero no "0". Supongo que eso es lo que querías decir? Es concebible que esto se esté utilizando en una situación en la que sabes que aes una cadena o nula, pero sí. Algo a tener en cuenta.
SpoonMeiser
25

Según la respuesta de David, personalmente me gusta comprobar primero el objeto dado si es una cadena. De lo contrario, invocar .trim()un objeto no existente generaría una excepción:

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
fuente
i comprobar con <br /> <p> </ p> de área de texto y dijo que no está vacío como debería
kreamik
5

Compruebe si los datos son una cadena vacía (e ignore cualquier espacio en blanco) con jQuery:

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

Para comprobar todos los 'vacíos' 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 y 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
fuente
3
if(!my_string){ 
// stuff 
}

y

if(my_string !== "")

si quiere aceptar nulo pero rechazar vacío

EDITAR: woops, olvidé tu condición si está vacía

Greg
fuente
2

Intente ejecutar esto en la consola de su navegador o en una respuesta node.js.

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

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

Por lo tanto, una simple construcción de ramificación será suficiente para la prueba.

if(string) {
    // string is not empty
}
Harry Love
fuente
1
es mejor decir "!! string" en lugar de "string? true: false" o incluso simplemente "string".
ア レ ッ ク ス
2

Dado que también puede ingresar números, así como cadenas de tipo fijo, la respuesta debería ser:

function isBlank(value) {
  return $.trim(value);
}
Steven
fuente
¿No debería ser así? return !!$.trim(value);
wonsuc
-1

Prueba esto

if(!a || a.length === 0)
Atif Aziz
fuente
El OP expresó específicamente que están buscando una alternativa a esto.
Wayne
-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}
Amarjeet Chaani
fuente
Si a es nullentonces a.trim()fallaría. Este es un mal orden para verificar las cosas. Y si cambia el orden, su respuesta no proporciona nada, eso no se ha sugerido antes.
Mike Scotty