¿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.



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 .


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.


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

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

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

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


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
}

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

¿No debería ser así? return !!$.trim(value);
wonsuc

-1

Prueba esto

if(!a || a.length === 0)

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
}

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.