下面是一段代码片段,我们在其中检索表单值。 在进一步处理之前,检查该值是否为空..
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");
}
任何想法为什么会这样发生...... ??
答案 0 :(得分:133)
这将为您解决问题
if (!!val) {
alert("this is not null")
} else {
alert("this is null")
}
答案 1 :(得分:65)
答案 2 :(得分:56)
有三种方法可以检查" not null"。我的建议是使用Strict Not Version。
if (val !== null) { ... }
严格非版本使用"严格的等式比较算法" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6。 !==
具有比!=
运算符更快的性能,因为严格等式比较算法不具有类型转换值。
if (val != 'null') { ... }
非严格版本使用"抽象等式比较算法" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3。 !=
的性能低于!==
运算符,因为抽象等式比较算法对值进行了类型化。
if (!!val) { ... }
Double Not Version !!
的性能比Strict Not Version !==
和Non-Strict Not Version !=
(https://jsperf.com/tfm-not-null/6)更快。但是,它会被强制转移" Falsey" undefined
和NaN
之类的值为False(http://www.ecma-international.org/ecma-262/5.1/#sec-9.2)可能导致意外结果,并且由于null
未明确说明,因此可读性更差。
答案 3 :(得分:26)
使用!==
作为!=
会让您进入一个非传递性JavaScript真值表奇怪的世界。
答案 4 :(得分:7)
您应该使用严格的not equals
比较运算符!==
,这样,如果用户输入"null"
,那么您将无法访问else
。
答案 5 :(得分:4)
可能是因为val
的值实际上是字符串"null"
而不是值null
。
答案 6 :(得分:3)
这应该可以正常工作..
if(val!= null)
{
alert("value is "+val.length); //-- this returns 4
}
else
{
alert("value* is null");
}
答案 7 :(得分:2)
如果您希望能够将0包含为有效值:
if (!!val || val === 0) { ... }
答案 8 :(得分:1)
选中https://softwareengineering.stackexchange.com/a/253723
if(value) {
}
如果值不为真,则计算为true
null
undefined
NaN
empty string ("")
0
false
答案 9 :(得分:0)
这将有效:
if (val) {
alert("Not null");
} else {
alert("Null");
}