javascript检查不为null

下面是一个代码片断,我们检索一个表单值。 在进一步处理之前检查值是否不为空

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

任何想法,为什么会发生这样的..?

这是因为val不是null ,而是包含'null'作为string。

尝试检查'null'

 if ('null' != val) 

这将为你做的伎俩

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

使用!== as !=会让你进入一个不灵敏的JavaScript真值表怪异世界。

有3种方法来检查“不为空”。 我的build议是使用严格的非版本。

1.严格不是版本

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

严格非版本使用“严格平等比较algorithm” http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6!==!=运算符具有更快的性能,因为严格平等比较algorithm不包含types值。

2.非严格的非版本

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

非严格版本使用“抽象平等比较algorithm” http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3!=性能低于!==运算符,因为Abstract Equality Comparisonalgorithm会对types值进行types转换。

3.双重版本

 if (!!val) { ... } 

双非版本!! 比严格非版本!==和非严格非版本!=https://jsperf.com/tfm-not-null/6 )都有更快的性能。 然而,它会像“ undefined和“ NaN ”这样的“Falsey”值types化为False( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ),这可能会导致意想不到的结果,可读性,因为null没有明确说明。

你应该使用严格的not equals比较运算符!==这样如果用户input"null"那么你将不会去else

这可能是因为val的值实际上是string"null"而不是null

如果您希望能够包含0作为有效值:

 if (!!val || val === 0) { ... } 

这应该很好..

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

这将工作:

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