javascript检查不为null

ria*_*ria 121 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");
}
Run Code Online (Sandbox Code Playgroud)

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

use*_*390 142

这将为你做到这一点

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然从技术上说这是有效的,但是双倍的不是(!!)是一种编程失败.它实际上相当于`if(val)`,它更清晰易读.我会坚持这个(fyi Ujwal,!! val应该在技术上也适用于C或C++)在这里看到javascript'真实性'值:https://janosch.woschitz.org/javascript-equality-comparison/ (19认同)
  • 如果`val = 0`则会失败,因为`!! 0`的计算结果为false (10认同)
  • 谢谢perfekt.(!! val):JS ==(val):C,C++ (3认同)
  • 怎么样if(!Boolean(val)) (2认同)
  • 这不是一个简单的双重否定.这是一个转变双重否定.您基本上将变量转换为布尔值.关于这个问题还有很多话要说,但是如果你的变量是'0`,`false`,`null`,`undefined`或者某个用一个解析为'true`的值,你就足够了! !!为了获得'假'.如果有的话,应该谨慎使用它. (2认同)

Ars*_*yan 70

这是因为val不是null,但包含'null'为字符串.

尝试检查'null'

if ('null' != val)
Run Code Online (Sandbox Code Playgroud)

有关何时以及为何有效的说明,请参阅下面的详细信息.

  • 应该是if(null!= val)以某种方式它不使用引号 (2认同)

tfm*_*gue 68

有3种方法可以检查"not null".我的建议是使用Strict Not Version.

1.严格不是版本

if (val !== null) { ... }
Run Code Online (Sandbox Code Playgroud)

Strict Not Version使用"严格的平等比较算法" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6.由于严格的等式比较算法没有对类型进行类型转换!==,因此它具有比!=运算符更快的性能.

2.非严格不版本

if (val != 'null') { ... }
Run Code Online (Sandbox Code Playgroud)

非严格版本使用"抽象平等比较算法" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3.在!=具有较低的性能,比!==因为抽象平等比较算法类型转换值操作.

3.双倍版本

if (!!val) { ... }
Run Code Online (Sandbox Code Playgroud)

Double Not Version !!比Strict Not Version !==和Non-Strict Not Version !=(https://jsperf.com/tfm-not-null/6)具有更快的性能.然而,它会强制转换,如"Falsey"的价值观undefined,并NaN为假(http://www.ecma-international.org/ecma-262/5.1/#sec-9.2),这可能导致意外的结果,它具有可读性变得更糟,因为null没有明确说明.


Ply*_*ynx 28

使用!==as !=会让你进入一个非传递JavaScript真值表古怪的世界.

  • 除非你想专门检查“undefined”或“null”。在这种情况下,“val != null”将为“undefined”或“null”返回“true”,但不会为“0”等其他错误值返回“true”。 (2认同)

小智 8

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

if(value) {
}
Run Code Online (Sandbox Code Playgroud)

如果 value 不是以下值,则评估结果为 true:

null
undefined
NaN
empty string ("")
0
false
Run Code Online (Sandbox Code Playgroud)


War*_*rty 7

您应该使用严格not equals比较运算符,!==以便如果用户输入,"null"那么您将无法访问else.

  • 如果数据输入表中不接受 Susan Null 的名字,她会不高兴的,哈哈 (2认同)

Sco*_*CSD 5

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


VKG*_*KGS 5

这应该可以正常工作..

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