哪一種方法檢查變量是否已初始化是更好/正確的方法? (假設變量能夠容納任何內容(字符串,整數,對象,函數等)。 瀏覽器
if (elem) { // or !elem
要麼 函數
if (typeof(elem) !== 'undefined') {
要麼 測試
if (elem != null) {
在JavaScript中,能夠定義一個變量,可是將其值保留爲undefined
,所以最多見的答案在技術上並不正確,而是執行如下操做: spa
if (typeof v === "undefined") { // no variable "v" is defined in the current scope // *or* some variable v exists and has been assigned the value undefined } else { // some variable (global or local) "v" is defined in the current scope // *and* it contains a value other than undefined }
這可能足以知足您的目的。 如下測試具備更簡單的語義,這使得更容易精確地描述代碼的行爲並親自理解(若是您關心這樣的事情): code
if ("v" in window) { // global variable v is defined } else { // global variable v is not defined }
固然,這假定您正在瀏覽器中運行(其中window
是全局對象的名稱)。 可是,若是您想像這樣的全局變量,則多是在瀏覽器中。 從主觀上講, 'name' in window
使用'name' in window
樣式上與使用window.name
引用全局變量一致。 做爲window
屬性而不是變量訪問全局變量,可使您在代碼中引用的未聲明變量的數量最少(以利於襯裏),並避免全局變量被局部變量覆蓋的可能性。 另外,若是全局對象使您的皮膚爬行,則僅用此相對較長的棍子接觸它們時,您可能會感到更溫馨。 對象
if (typeof console != "undefined") { ... }
或更好 ip
if ((typeof console == "object") && (typeof console.profile == "function")) { console.profile(f.constructor); }
適用於全部瀏覽器 字符串
在問題概述的特定狀況下, it
typeof window.console === "undefined"
與...相同 io
window.console === undefined
我更喜歡後者,由於它更短。
請注意,咱們僅在全局範圍(在全部瀏覽器中都是window
對象)中查找console
。 在這種特殊狀況下,這是可取的。 咱們不但願在其餘地方定義console
。
@BrianKelley在他的出色回答中解釋了技術細節。 我僅添加了缺乏的結論,並將其摘要爲更易於閱讀的內容。
最高答案是正確的,請使用typeof。
可是,我想指出的是,在JavaScript中, undefined
是可變的(出於某些不敬虔的緣由)。 所以,僅檢查varName !== undefined
就有可能沒法老是按預期返回,由於其餘庫可能已更改成undefined。 一些答案(@skalee的答案)彷佛更喜歡不使用typeof
,這可能會給您帶來麻煩。
「舊」的方式來處理這個問題被宣佈不定位爲VAR,以抵消任何潛在的靜音/的壓倒一切的undefined
。 可是,最好的方法仍然是使用typeof
由於它將忽略其餘代碼中全部undefined
覆蓋。 尤爲是若是您正在編寫要在野外使用的代碼,那麼誰又知道該頁面上可能還會運行什麼……
您可使用typeof
運算符。
例如,
var dataSet; alert("Variable dataSet is : " + typeof dataSet);
上面的代碼片斷將返回相似的輸出
變量dataSet是:未定義。