2011-10-10 68 views
0

我有一種情況,我正在搜索數組中的某些東西,如果找到了某個值,我會做一些事情。我這樣做是通過設置一個變量爲undefined,然後當找到該值時,設置爲找到的元素的索引。如果返回的值不是0,那麼這將工作,但如果它是0,則返回false。我該如何解決這個問題?如何讓0返回true?

var index = undefined; 
for(var i=0; i<ARRAY; i++) 
{ 
    if(CONDITION) 
    index = i; 
} 
if(index) 
{ 
    DO SOMETHING 
} 

所以我的問題發生時,索引竟然是零,因爲這返回false。我想這樣做的原因是因爲我不確定它是否存在於數組中。

+10

顯示您的測試用例,並定義所有這些「東西」。 –

+0

請發佈代碼片段。 –

+0

發佈一些代碼。 –

回答

2

你的意思是你有一個變量,可能是undefined或某個數字,你想undefined0區分?

然後:

if (index)  // wrong 
if (index >= 0) // right 

或者你可以使用感知類型的比較:

if (index !== undefined) { .. } 
+0

這解決了我的問題,但在看了其他答案之後,我意識到我過於複雜了。我可以使用-1的java方法。 – hbhakhra

+0

@hbtest:當然,你也可以這樣做。這不是這個問題的答案,但它完全避免了最初的問題。 FWIW,我會使用'undefined':它比'-1'更接近正數,因此我覺得它更適合用作非索引定位符。 –

+0

我打算接受你的,但現在接受答案還爲時過早。 – hbhakhra

2

0在javascript中是falsey;使用===測試值是否實際上是假的:

foo = 0; 
foo == false //true 
foo === false //false 

當你將該值設置爲測試undefined一個方法是看該值是否不是數字:

if (!isNaN(foo)) 
{ 
    //foo is numeric 
} 
+1

是的,但OP說:其他元素是'undefined',而不是'false'(儘管他明顯可以像'undefined'一樣容易地使用'false')。 –

+1

@丹濤,自從我第一次發佈我的簡短答案以來,原始問題已經發生了顯着變化。 – zzzzBov

+0

@zzzzBov:不,自從它首次發佈以來,它被稱爲「未定義」。 –

5

如何關於測試結果以查看它是否是>= 0而不是依賴它的真實性?

if (index >= 0) { ... } 

undefined>= 0,這樣應該工作。

+0

謝謝你提醒我做簡單的做我想做的事。我是JavaScript新手,所以我試圖使用它的花哨技巧,但我想如果它沒有損壞,那麼不要修復它。 – hbhakhra

2

您可以使用-1,指示該指數在數組中沒有被發現。正如你所提到的,如果你像布爾一樣使用它,0將被隱式轉換爲「假」。您可以使用===來避免隱式轉換。

2

你可以......不這樣做,因爲你需要在JS的真實性定義中工作,或明確檢查undefined

3

爲什麼不100%明確?這是,畢竟,你實際上打算檢查:

if (typeof index === 'number') 
{ 
    // DO SOMETHING 
} 

我喜歡這個甚至檢查>= 0自認爲操作,使非數值一些怪異的結果:

Input | >= 0 
------------ 
"1" | true 
false | true 
null | true 
[] | true 
"" | true 

(請參見this jsFiddle以獲得證據。)