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í ...?
javascript
ria
fuente
fuente
Respuestas:
Es porque val no lo es
null
, pero contiene'null'
como una cadena.Intenta comprobar con 'nulo'
Para una explicación de cuándo y por qué esto funciona, vea los detalles a continuación .
fuente
esto hará el truco para ti
fuente
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-comparisonval = 0
desde entonces se!!0
evalúa como falso0
,false
,null
,undefined
o algo por el valor que se resuelve entrue
uno!, Usted va a obtenerfalse
por !!. Debe usarse con moderación si es que lo hace.Hay 3 formas de verificar "no nulo". Mi recomendación es usar Strict Not Version.
1. Estricto no versión
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
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
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" comoundefined
yNaN
en falso ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ) lo que puede conducir a resultados inesperados, y tiene peor legibilidad porquenull
no se declara explícitamentefuente
!!val
funcionó para mí peroval!==null
no lo ha hecho. Por que esval
?console.log(typeof val)
.!!
eliminará más que solonull
. Se convertiráNaN
y se convertiráundefined
en falso también. Y es por eso que su matriz se filtra correctamente cuando usa el doble no operador!!
.Úselo
!==
como lo!=
llevará a un mundo de rareza de tabla de verdad JavaScript no transitiva.fuente
undefined
onull
. En cuyo casoval != null
volverátrue
paraundefined
onull
no para otros valores de falsey como0
.Debería utilizar el
not equals
operador de comparación estricta!==
para que si el usuario ingresa"null"
, no llegue alelse
.fuente
Posiblemente es porque el valor de
val
es en realidad la cadena en"null"
lugar del valornull
.fuente
Esto debería funcionar bien ...
fuente
Si desea poder incluir 0 como valor válido:
fuente
Esto funcionará:
fuente
Consulte https://softwareengineering.stackexchange.com/a/253723
se evaluará como verdadero si el valor no es:
fuente