2013-04-22 85 views
4

據我所知,檢查未定義變量的首選方式是typeof a === 'undefined'typeof a =='undefined'vs typeof a ==='undefined'

但爲什麼它比typeof a == 'undefined'更好呢?在哪些地方可以失敗?

+1

@ Jake1164它爲什麼重複?在這個問題上與「空白」相比較。 – 2013-04-22 11:20:01

回答

8

在這種情況下,因爲typeof總是會給你一個字符串:它不會更好(也不會更糟糕)。它沒有實際的區別。

一般,使用===是首選,因爲它強制您明確表達您的類型,並且避免您獲得JavaScript類型解析規則不直觀的結果。

+0

+1。你認爲一個會比另一個慢嗎?或者JS引擎知道它總是比較字符串並優化? – Bergi 2013-04-22 11:21:28

+0

'==='可能會運行得更快,需要更長時間才能下載,但差別非常小,所以不應該擔心。 (至少直到你在循環中做了幾千次)。謹防過早優化,它是萬惡之源。 – Quentin 2013-04-22 11:22:52

+0

我不認爲你可以說嚴格的平等是「一般」的首選,因爲絕大多數我見過的代碼都使用'=='。在JavaScript社區中有一些比較有影響力的人比其他人更喜歡,但是需要程序員去了解差異並適當地使用它們。在JavaScript中,變量的類型通常是不相關的,它是一種鬆散類型的語言,其中'==='可以產生與== ==相同的驚喜,特別是在使用DOM時有時返回值作爲字符串和其他時間數字。 – RobG 2013-04-22 11:49:29

3

因爲typeof只會返回字符串,所以比較兩個字符串與==是安全的。

1

=====Check out here)

之間有很大的差異,但由於typeof運算將總是返回的字符串,它的確定使用這個。

5

=====之間的區別是==執行因此,例如1將爲=='1',但不是==='1'。當您檢查undefined時,首選此方法的原因是因爲在JavaScript中有已知的比較陷阱。

最常見的:

''  == '0'   //false 
0   == ''   //true 
0   == '0'   //true 
false  == 'false'  //false 
false  == '0'   //true 
false  == undefined  //false 
false  == null   //false 
null  == undefined  //true 
" \t\r\n" == 0    //true 

因此,與===你避免null == undefined問題,這可能會導致難以發現的錯誤。這就是爲什麼你應該使用==而不是===。因爲===不在幕後執行任何轉換,所以它也是一個更快的操作。

在這個特定的情況下,它在效果上不會有什麼不同。無論您使用typeof a == 'undefined'還是typeof a === 'undefined',輸出都是一樣的,沒有錯誤。這是因爲typeof返回一個字符串。但是,操作速度會更快,因此性能提升可以忽略不計。

+0

+1用於回答問題*和*徹底。 ;-) – RobG 2013-04-22 12:17:36