據我所知,檢查未定義變量的首選方式是typeof a === 'undefined'
。typeof a =='undefined'vs typeof a ==='undefined'
但爲什麼它比typeof a == 'undefined'
更好呢?在哪些地方可以失敗?
據我所知,檢查未定義變量的首選方式是typeof a === 'undefined'
。typeof a =='undefined'vs typeof a ==='undefined'
但爲什麼它比typeof a == 'undefined'
更好呢?在哪些地方可以失敗?
在這種情況下,因爲typeof
總是會給你一個字符串:它不會更好(也不會更糟糕)。它沒有實際的區別。
一般,使用===
是首選,因爲它強制您明確表達您的類型,並且避免您獲得JavaScript類型解析規則不直觀的結果。
+1。你認爲一個會比另一個慢嗎?或者JS引擎知道它總是比較字符串並優化? – Bergi 2013-04-22 11:21:28
'==='可能會運行得更快,需要更長時間才能下載,但差別非常小,所以不應該擔心。 (至少直到你在循環中做了幾千次)。謹防過早優化,它是萬惡之源。 – Quentin 2013-04-22 11:22:52
我不認爲你可以說嚴格的平等是「一般」的首選,因爲絕大多數我見過的代碼都使用'=='。在JavaScript社區中有一些比較有影響力的人比其他人更喜歡,但是需要程序員去了解差異並適當地使用它們。在JavaScript中,變量的類型通常是不相關的,它是一種鬆散類型的語言,其中'==='可以產生與== ==相同的驚喜,特別是在使用DOM時有時返回值作爲字符串和其他時間數字。 – RobG 2013-04-22 11:49:29
因爲typeof
只會返回字符串,所以比較兩個字符串與==
是安全的。
有==
和===
(Check out here)
之間有很大的差異,但由於typeof運算將總是返回的字符串,它的確定使用這個。
==
和===
之間的區別是==
執行因此,例如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
返回一個字符串。但是,操作速度會更快,因此性能提升可以忽略不計。
+1用於回答問題*和*徹底。 ;-) – RobG 2013-04-22 12:17:36
@ Jake1164它爲什麼重複?在這個問題上與「空白」相比較。 – 2013-04-22 11:20:01