2010-03-11 71 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