Vi esta pregunta , pero no vi un ejemplo específico de JavaScript. ¿Hay un simple string.Empty
disponible en JavaScript, o es solo un caso de verificación ""
?
javascript
null
is-empty
casademora
fuente
fuente
Respuestas:
Si solo desea verificar si hay algún valor, puede hacerlo
Si necesita verificar específicamente si hay una cadena vacía sobre nula, creo que verificar
""
es su mejor opción, utilizando el===
operador (para que sepa que, de hecho, es una cadena con la que está comparando).fuente
=== ''
vs.length
no mostraron ninguna mejora perceptible (y.length
solo funciona si puedes asumir que tienes una cadena).length > 0
realidad es mucho más rápido que compararlo con un literal de cadena Echa un vistazo a este jsPerfPara verificar si una cadena está vacía, nula o indefinida, uso:
Para verificar si una cadena está en blanco, nula o indefinida, uso:
Para verificar si una cadena está en blanco o contiene solo espacios en blanco:
fuente
if (variable == constant value)
y si olvida un '=', está asignando el valor constante a la variable en lugar de probar. El código seguirá funcionando, ya que puede asignar variables en un if. Entonces, una forma más segura de escribir esta condición es invertir el valor constante y la variable. De esta manera, cuando pruebe su código, verá un error (lado izquierdo no válido en la asignación). También puede usar algo como JSHint para no permitir la asignación en condiciones y recibir una advertencia cuando escriba una./^\s*$/.test(str)
no sea realmente legible: ¿quizás sería mejor eliminar espacios usando un código más simple o regex? ver stackoverflow.com/questions/6623231/… y también stackoverflow.com/questions/10800355/…if blue is the sky
. Ver dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.htmlTodas las respuestas anteriores son buenas, pero esto será aún mejor. Utilice el operador
!!
( no no ).O use el tipo de fundición:
Ambos hacen la misma función. Escriba la variable en booleano, donde
str
es una variable.Vuelve
false
pornull,undefined,0,000,"",false
.Se devuelve
true
para la cadena "0" y el espacio en blanco "".fuente
if(str)
yif(!!str)
?var any = (!!str1 && !!str2 && !!str3)
manejo si hay un número allí también!!str.trim()
para asegurarse de que la cadena no esté hecha solo de espacios en blanco.Boolean(str)
es mucho más legible y menos "wtfish".Lo más cercano a lo que puede llegar
str.Empty
(con la condición previa de que str es un String) es:fuente
str.Empty
.Si necesita asegurarse de que la cadena no sea solo un montón de espacios vacíos (supongo que esto es para la validación del formulario), debe reemplazar los espacios.
fuente
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
Yo suelo:
fuente
typeof
en elswitch
no funcionó para mí. Agregué unaif (typeof e == "undefined")
prueba y eso funciona. ¿Por qué?case undefined:
lugar decase typeof(e) == "undefined":
?Puede usar lodash : _.isEmpty (value).
Abarca una gran cantidad de casos como
{}
,''
,null
,undefined
, etc.Pero siempre regresa
true
para elNumber
tipo de tipos de datos primitivos de JavaScript como_.isEmpty(10)
o_.isEmpty(Number.MAX_VALUE)
ambos retornostrue
.fuente
_.isEmpty(" "); // => false
" "
no está vacío._.isEmpty("");
devuelve verdaderoTratar:
fuente
str.trim().length
lo haré más rápido questr.trim()
, en alrededor del 1% según el resultado de mi propia pruebaif (!str) { ... }
Función:
PD: en JavaScript, no use el salto de línea después
return
;fuente
if
declaración.No hay nada que represente una cadena vacía en JavaScript. Haga una verificación en contra
length
(si sabe que la var siempre será una cadena) o en""
fuente
No me preocuparía demasiado por el método más eficiente . Use lo que sea más claro para su intención. Para mí eso suele ser
strVar == ""
.Según el comentario de Constantin , si strVar podría de alguna manera terminar conteniendo un valor entero 0, entonces esa sería una de esas situaciones de aclaración de intenciones.
fuente
===
. Solo devuelve verdadero sistrVar
es una cadena vacía.¡Muchas respuestas y muchas posibilidades diferentes!
Sin duda para una implementación rápida y simple, el ganador es:
if (!str.length) {...}
Sin embargo, como muchos otros ejemplos están disponibles. El mejor método funcional para hacer esto, sugeriría:
Un poco excesivo, lo sé.
fuente
str.length === 0
devuelve verdadero para cualquier función que no tenga parámetros formales.También puedes ir con expresiones regulares:
Comprueba las cadenas que están vacías o llenas de espacios en blanco.
fuente
Actuación
Realizo pruebas en macOS v10.13.6 (High Sierra) para 18 soluciones elegidas. Las soluciones funcionan ligeramente diferentes (para datos de entrada de mayúsculas y minúsculas) que se presentó en el fragmento a continuación.
Conclusiones
!str
,==
,===
ylength
son rápidos para todos los navegadores (A, B, C, G, I, J)test
,replace
) ycharAt
son más lentas para todos los navegadores (H, L, M, P)Detalles
En el fragmento de abajo comparo los resultados de 18 métodos elegidos mediante el uso de diferentes parámetros de entrada
""
"a"
" "
- cadena vacía, cadena con letra y cadena con espacio[]
{}
f
- matriz, objeto y función0
1
NaN
Infinity
- númerostrue
false
- booleanonull
undefined
No todos los métodos probados admiten todos los casos de entrada.
Mostrar fragmento de código
Y luego, para todos los métodos, realizo un caso de prueba de velocidad
str = ""
para los navegadores Chrome v78.0.0, Safari v13.0.4 y Firefox v71.0.0: puede ejecutar pruebas en su máquina aquífuente
var a;
existerecorte
false spaces
el valor, luego pruebeemptiness
fuente
Además, en caso de que considere una cadena llena de espacios en blanco como "vacía".
Puedes probarlo con esta expresión regular:
fuente
Usualmente uso algo como esto,
fuente
typeof variable != "undefined"
antes de verificar si está vacío.No he notado una respuesta que tenga en cuenta la posibilidad de caracteres nulos en una cadena. Por ejemplo, si tenemos una cadena de caracteres nula:
Para probar su nulidad, se podría hacer algo como esto:
Funciona en una cadena nula y en una cadena vacía y es accesible para todas las cadenas. Además, podría expandirse para contener otros caracteres de espacio en blanco o vacíos de JavaScript (es decir, espacio sin interrupción, marca de orden de bytes, separador de línea / párrafo, etc.).
fuente
Mientras tanto, podemos tener una función que verifica todos los 'vacíos' como nulo, indefinido, '', '', {}, [] . Entonces acabo de escribir esto.
Casos de uso y resultados.
fuente
A partir de ahora no existe un método directo como string.empty para verificar si una cadena está vacía o no. Pero en su código puede usar una verificación de contenedor para una cadena vacía como:
Con esto, también puede asegurarse de que la cadena no esté indefinida o nula. Recuerde, indefinido, nulo y vacío son tres cosas diferentes.
fuente
let rand = ()=>Math.random()
, luegorand && rand.length > 0)
devuelve falso, pero claramente fn no está "vacío". Es decir, devuelve falso para cualquier función que no tenga parámetros de formato.Math.random()
devuelve un número y no una cadena. Y esta respuesta es sobre cadenas. ;-)Todas estas respuestas son buenas.
Pero no puedo estar seguro de que la variable es una cadena, no contiene solo espacios (esto es importante para mí) y puede contener '0' (cadena).
Mi version:
Muestra en jsfiddle .
fuente
empty(0)
yempty(7)
debe devolver el mismo valor.empty("0")
debe regresarfalse
(porque es una cadena no vacía), peroempty(0)
debe regresartrue
porque está vacío :)empty
es un nombre engañoso en este caso.empty
es bueno. En documentos php para la función vacía :Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.
La diferencia entrePHP
y esta función: esa cadena'0'
no se identificará como vacía.empty
es un nombre inexacto y engañoso. Es interesante que PHP también tenga una función mal nombradaempty
, pero las fallas de PHP no tienen nada que ver con JavaScript.No vi una buena respuesta aquí (al menos no una respuesta que me quede bien)
Entonces decidí responderme:
value === undefined || value === null || value === "";
Debe comenzar a verificar si no está definido. De lo contrario, su método puede explotar, y luego puede verificar si es igual a nulo o es igual a una cadena vacía.
No puedes tener !! o solo
if(value)
porque si marca,0
le dará una respuesta falsa (0 es falso).Dicho esto, envuélvelo en un método como:
public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }
PD .: No es necesario verificar typeof , ya que explotaría y arrojaría incluso antes de ingresar al método
fuente
Si uno necesita detectar no solo cadenas vacías sino también en blanco, agregaré a la respuesta de Goral:
fuente
Prueba esto
fuente
"".value.length
provocará un error Debería serstr.length === 0
TypeError
Ifstr
es igualundefined
onull
Puede agregarlo fácilmente al objeto String nativo en JavaScript y reutilizarlo una y otra vez ...
Algo simple como el siguiente código puede hacer el trabajo por usted si desea verificar
''
cadenas vacías:De lo contrario, si desea verificar tanto la
''
cadena vacía como el' '
espacio, puede hacerlo simplemente agregandotrim()
algo como el código a continuación:y puedes llamarlo así:
fuente
!(!!this.length)
lugar de solo!this
(o!this.trim()
para la segunda opción)? Una cadena de longitud cero ya es falsa, los paréntesis son redundantes, y negarlo tres veces es exactamente lo mismo que negarlo una vez.Prueba esto:
fuente
Investigué un poco sobre lo que sucede si pasa un valor sin cadena y no vacío / nulo a una función de prueba. Como muchos saben, (0 == "") es verdadero en JavaScript, pero dado que 0 es un valor y no está vacío o es nulo, es posible que desee probarlo.
Las siguientes dos funciones devuelven verdadero solo para valores indefinidos, nulos, vacíos / espacios en blanco y falso para todo lo demás, como números, booleanos, objetos, expresiones, etc.
Existen ejemplos más complicados, pero estos son simples y dan resultados consistentes. No es necesario hacer una prueba de indefinido, ya que está incluido en la verificación (valor == nulo). También puede imitar el comportamiento de C # agregándolos a String de esta manera:
No desea ponerlo en el prototipo de cadenas, porque si la instancia de la clase de cadena es nula, se producirá un error:
Probé con la siguiente matriz de valores. Puede recorrerlo para probar sus funciones si tiene dudas.
fuente
Para verificar si es exactamente una cadena vacía:
Para verificar si es una cadena vacía O un equivalente lógico para ningún valor (nulo, indefinido, 0, NaN, falso, ...):
fuente
No hay ningún
isEmpty()
método, debe verificar el tipo y la longitud:La verificación de tipo es necesaria para evitar errores de tiempo de ejecución cuando
test
esundefined
onull
.fuente
Ignorando las cadenas de espacios en blanco, puede usar esto para verificar nulos, vacíos e indefinidos:
Es conciso y funciona para propiedades indefinidas, aunque no es el más legible.
fuente