comprobación de JavaScript para no nulo


132

A continuación se muestra un fragmento de código, donde recuperamos un valor de formulario. Antes de continuar con el procesamiento, verifique si el valor no es nulo.

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

¿Alguna idea de por qué sucede así ...?


2
CW sucedió porque más de 6 usuarios editaron la pregunta.

! == en lugar de! =
GetBackerZ

Respuestas:


78

Es porque val no lo es null, pero contiene'null' como una cadena.

Intenta comprobar con 'nulo'

if ('null' != val)

Para una explicación de cuándo y por qué esto funciona, vea los detalles a continuación .


2
debería ser si (nulo! = val) de alguna manera no funcionaba con las comillas
Ananda

Mr.x en la pregunta, nulo era como una cadena ... su caso probablemente sea diferente
Arsen Mkrtchyan

145

esto hará el truco para ti

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

22
Si bien técnicamente esto funciona, un doble no (!!) es un paso en falso de programación. Es realmente el equivalente de if(val), que es mucho más claro de leer. Me apegaría a eso (fyi Ujwal, !! val debería funcionar técnicamente en C o C ++ también) ver aquí los valores de 'veracidad' de javascript: janosch.woschitz.org/javascript-equality-comparison
Will Buck

2
¿qué tal si (! Boolean (val))
thedjaney

1
!! es solo un doble negativo, por lo que literalmente dice if (val.exists). ¡Todavía me gusta cómo se ve!
Kurai Bankusu

12
esto fallará si val = 0desde entonces se !!0evalúa como falso
punkrockpolly

3
No es un simple doble negativo. Es un doble negativo transformador. Básicamente, estás transformando la variable en booleana. Hay mucho que decir sobre el tema, pero baste decir que, en los casos en que la variable es 0, false, null, undefinedo algo por el valor que se resuelve en trueuno!, Usted va a obtener falsepor !!. Debe usarse con moderación si es que lo hace.
Guy Passy

83

Hay 3 formas de verificar "no nulo". Mi recomendación es usar Strict Not Version.

1. Estricto no versión

if (val !== null) { ... }

La versión estricta no utiliza el "Algoritmo estricto de comparación de igualdad" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 . los!== tiene un rendimiento más rápido, que el!= operador debido a que la igualdad estricta Comparación algoritmo no encasillado valores.

2. No estricta no versión

if (val != 'null') { ... }

La versión no estricta utiliza el "Algoritmo de comparación de igualdad abstracta" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 . El !=tiene un rendimiento más lento que el!== operador debido a que el algoritmo de comparación abstracta Igualdad typecasts valores.

3. Doble no versión

if (!!val) { ... }

La versión no doble !!tiene un rendimiento más rápido que la versión no estricta !==y la versión no estricta !=( https://jsperf.com/tfm-not-null/6 ). Sin embargo, encasillará los valores de "Falsey" como undefinedy NaNen falso ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ) lo que puede conducir a resultados inesperados, y tiene peor legibilidad porque nullno se declara explícitamente


Es muy extraño !!valfuncionó para mí pero val!==nullno lo ha hecho. Por que es
TheLogicGuy

@TheLogicGuy - ¿Cuál es el tipo de datos val? console.log(typeof val).
tfmontague

número. el código elimina los valores "incorrectos" de la matriz (nulo, 0, etc.). Aquí está el código: pastebin.com/L7Z1BtuL
TheLogicGuy

1
@TheLogicGuy: su problema real no tiene nada que ver con nulo. NaN no se filtra correctamente, eso siempre devolverá verdadero. Esto debería funcionar:! (IsNaN (val) && (typeof val! == "undefined")). En Javascript hay un concepto conocido como "Verdad" y "Falsey". El operador doble no !!eliminará más que solo null. Se convertirá NaNy se convertirá undefineden falso también. Y es por eso que su matriz se filtra correctamente cuando usa el doble no operador !!.
tfmontague

30

Úselo !==como lo !=llevará a un mundo de rareza de tabla de verdad JavaScript no transitiva.


A menos que desee verificar específicamente para undefinedo null. En cuyo caso val != nullvolverá truepara undefinedo nullno para otros valores de falsey como 0.
Eric H

8

Debería utilizar el not equalsoperador de comparación estricta !==para que si el usuario ingresa "null", no llegue al else.


1
Susan Null no sería feliz si su nombre no fuera aceptado en un formulario de entrada de datos jajaja
Andez

5

Posiblemente es porque el valor de vales en realidad la cadena en "null"lugar del valor null.


3

Esto debería funcionar bien ...

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }


1

Esto funcionará:

if (val) {
    alert("Not null");
} else {
    alert("Null");
}

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.