2010-03-11 74 views
79

下面是一段代码,我们在这里检索表单值。 进一步处理前检查,如果该值不为空..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"); 
} 

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

+0

无法解除CW吗? – Anurag 2010-03-11 06:20:08

+2

CW发生是因为有6位用户编辑了这个问题。 – YOU 2010-03-11 06:22:46

回答

51

这是因为val不是null,而是包含'null'作为字符串。

尝试检查与“空”

if ('null' != val) 
+2

应该是if(null!= val)某种程度上它不是在报价中使用 – Ananda 2016-08-15 09:09:28

+0

Mr.x,null是字符串......你的情况可能不同 – 2016-08-15 13:26:24

7

您应该使用严格not equals比较操作!==因此,如果用户输入"null"那么您将无法获得到else

+0

如果她的名字不是在数据输入表单中接受lol – Andez 2017-01-03 14:50:13

25

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

4

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

118

这将这样的伎俩为您

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

谢谢perfekt。 (!! val):JS ==(val):C,C++ – 2012-12-09 14:15:43

+17

虽然在技术上这可以工作,但双不是(!!)是一个编程人脸识别。它实际上相当于'if(val)',它更清晰易读。我会坚持(fyi Ujwal,!! val应该在C或C++技术上也可以)请参阅这里了解JavaScript的“真实性”值:https://janosch.woschitz.org/javascript-equality-comparison/ – 2013-03-21 18:00:00

+2

如果if (!Boolean(val)) – thedjaney 2013-04-01 08:35:47

1

这应该做工精细..

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

这将工作:

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

如果你希望能够包括0作为有效值:

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

有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)。但是,它会将类似undefinedNaN的“Falsey”值转换为False(http://www.ecma-international.org/ecma-262/5.1/#sec-9.2),这可能会导致意外的结果,并且由于null没有明确说明,所以它的可读性更差。

+0

这很奇怪。 '!! val'为我工作,但'val!== null'没有。为什么? – TheLogicGuy 2016-08-02 10:53:28

+0

@TheLogicGuy - val的数据类型是什么? 'console.log(typeof val)'。 – tfmontague 2016-08-03 14:56:07

+0

号码。该代码从数组中删除“坏”值(null,0等)。这里是代码:http://pastebin.com/L7Z1BtuL – TheLogicGuy 2016-08-06 18:15:56