var a;
(a == undefined)
(a === undefined)
((typeof a) == "undefined")
((typeof a) === "undefined")
一個,我們應該使用哪有何區別?
var a;
(a == undefined)
(a === undefined)
((typeof a) == "undefined")
((typeof a) === "undefined")
一個,我們應該使用哪有何區別?
諷刺的是,undefined
在JavaScript被重新定義,而不是任何人在他們的腦子會做到這一點,例如:
undefined = "LOL!";
此時對undefined
所有未來的平等檢查將一代產量意想不到的效果!
至於==
和===
(平等運營商)之間的差額,==將試圖從一種類型的值強制轉換到另一個,在英語這意味着0 == "0"
將評估爲真實的,即使類型不同(編號VS字符串) - 開發人員傾向於避免這種類型的鬆散相等,因爲這會導致難以調試代碼中的錯誤。
因此,它是最安全的使用方法:
"undefined" === typeof a
當檢查undefinedness :)
({tries undefined = true})誰在......爲什麼...... AAHG!爲什麼會有人?這是EcmaScript的真正失敗。我從來沒有想過這樣做。 – cwallenpoole
按照我的例子,'爲了lolz!' EcmaScript的下一次迭代(代號爲Harmony)將包括對常量的支持,這對我們的理性來說只是一件好事;)http://wiki.ecmascript.org/doku.php?id=harmony%3aconst – JonnyReeves
它是鏈接到你答案的第一部分:http://stackoverflow.com/questions/2703102/typeof-undefined-vs-null/2703131#2703131 – JohnJohnGa
var a;
(a == undefined) //true
(a === undefined) //true
((typeof a) == "undefined") //true
((typeof a) === "undefined") //true
但是:
var a;
(a == "undefined") //false
(a === "undefined") //false
((typeof a) == undefined) //false
((typeof a) === undefined) //false
當然 - 問題是關於差異沒有結果 - – JohnJohnGa
@JohnJohn好,如果他們都產生同樣的東西,沒有「差異」。但我相信最好的選擇是你的第二選擇。 – Neal
如果聲明var a
,那麼就不會是未定義任何更多的 - 這將是null
代替。我通常使用typeof a == undefined
- 它工作正常。這是在這種情況下尤其有用:
function myfunc(myvar)
{
if(typeof myvar == "undefined")
{
//the function was called without an argument, simply as myfunc()
}
}
如果是不確定的,那麼
a == undefined
實際上將拋出一個錯誤。使用
(typeof a) === "undefined"
取而代之。
爲什麼會出現錯誤? – Neal
Gah,你是對的,我錯過了OP代碼開頭的「var a」。 –
我個人喜歡用
[undefined, null].indexOf(variable) > -1
還檢查空值。
你應該使用上面提到的:
"undefined" === typeof a
但是,如果你有很多的變量來檢查,你的代碼可以在某些時候變得很惡劣,所以你可以考慮使用Java的做法:
try { vvv=xxx; zzz=yyyy; mmm=nnn; ooo=ppp; }
catch(err){ alert(err.message); }
顯然alert()不應該用於生產版本,但在調試版本中它非常有用。 應該在舊的瀏覽器,甚至工作就像IE 6:
https://msdn.microsoft.com/library/4yahc5d8%28v=vs.94%29.aspx
http://stackoverflow.com/q/2703102/469210似乎與這一問題有關。 – borrible
可能重複的[Javascript:undefined!== undefined?](http://stackoverflow.com/questions/776950/javascript-undefined-undefined) –