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