检查 javascript 是否为非空

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

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

知道为什么会这样吗?

526473 次浏览

这是因为 val 不是 null,而是以字符串形式包含 'null'

尝试用“ null”检查

if ('null' != val)

有关这种方法何时以及为什么有效的说明,请参见 详情如下:

您应该使用严格的 not equals比较运算符 !==,这样如果用户输入 "null",那么您就不会到达 else

使用 !==作为 !=将让你进入一个世界的非传递 JavaScript 真值表怪异。

这可能是因为 val的值实际上是字符串 "null",而不是值 null

这个对你有用

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

应该没问题。

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

这将奏效:

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

如果希望将0作为有效值包含在内:

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

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

1. 严格非版本

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

严格非版本使用“严格相等比较算法”http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6。因为严格相等比较算法不对值进行类型转换,所以 !==的性能比 !=运算符快。

2. 非严格版本

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

非严格版本使用“抽象等式比较算法”http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3!=的性能比 !==运算符慢,因为抽象等式比较算法对值进行类型化。

3. 双非版本

if (!!val) { ... }

双非版本 !!具有更快的性能,比严格非版本 !==和非严格非版本 !=(https://jsperf.com/tfm-not-null/6)。然而,它将类型化“ Falsey”值,如 undefinedNaN转换为 False (http://www.ecma-international.org/ecma-262/5.1/#sec-9.2) ,这可能会导致意外的结果,而且由于没有明确说明 null,它的可读性更差。

检查 https://softwareengineering.stackexchange.com/a/253723

if(value) {
}

如果值不是:

null
undefined
NaN
empty string ("")
0
false

使用双不版本

if (!!val) { ... }

双不版本! !有更快的性能,比两个严格非版本!= = 和非严格非版本!=