未定義可以將此代碼檢查空/ JavaScript中
if (typeof foo != "undefined" && foo !== null) { }
安全地重構這個代碼?
if (foo != null) { }
這是完全一樣的東西嗎? (如果不是,它是如何不同?)
未定義可以將此代碼檢查空/ JavaScript中
if (typeof foo != "undefined" && foo !== null) { }
安全地重構這個代碼?
if (foo != null) { }
這是完全一樣的東西嗎? (如果不是,它是如何不同?)
不是真的。如果foo
尚未聲明,則會在第二個示例中拋出ReferenceError
異常。
在另一方面,你可以安全地檢查是否與typeof
操作未定義非聲明的變量。
@Daniel我不明白。如果我有`var foo;`然後運行第二個代碼段,則不會拋出任何錯誤(至少在Chrome中不會)。 – 2010-12-05 18:45:26
一個簡單的實驗將回答這個問題:
if(foo != null) {
alert('foo not null');
}
上面的例子在許多瀏覽器產生一個JavaScript錯誤:"ReferenceError: Can't find variable: foo"
。這是因爲我們使用了一個先前未被聲明爲變量的變量,或者在當前作用域中使用了var
。
的typeof
運營商,在另一方面,爲使未被定義的變量的顯式的住宿 - 它返回'undefined'
,所以:
if(typeof foo != 'undefined') {
alert('foo is not defined');
}
按預期工作。
因此,答案是「不」 - 他們不是同樣的事情 - 儘管在一些 JavaScript環境,他們的行爲可能以同樣的方式,在其他環境中你的第二個表單將產生錯誤時foo
不定義。
變量可以實際持有價值undefined
,這是默認值,如果一個變量從未被分配到。所以foo != null
將工作,如果你的變量聲明使用var
或通過賦值賦予一個值,但如果它不是,你會得到一個ReferenceError。因此,這兩個片段是而不是等效。
如果你可以肯定的是foo
聲明,這是安全和更容易理解比你原來的第二個片段,假設無處代碼類似undefined = 42
存在:
if(foo !== undefined && foo !== null) { }
的可能重複的http:/ /stackoverflow.com/questions/801032/null-object-in-javascript – Hps 2010-12-05 18:43:00
@HPS我搜索了SO。這個問題從來沒有被問到。 – 2010-12-05 18:46:27