JavaScript檢查變量是否存在(已定義/初始化)

哪一種方法檢查變量是否已初始化是更好/正確的方法? (假設變量能夠容納任何內容(字符串,整數,對象,函數等)。 瀏覽器

if (elem) { // or !elem

要麼 函數

if (typeof(elem) !== 'undefined') {

要麼 測試

if (elem != null) {

#1樓

在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屬性而不是變量訪問全局變量,可使您在代碼中引用的未聲明變量的數量最少(以利於襯裏),並避免全局變量被局部變量覆蓋的可能性。 另外,若是全局對象使您的皮膚爬行,則僅用此相對較長的棍子接觸它們時,您可能會感到更溫馨。 對象


#2樓

if (typeof console != "undefined") {    
   ...
}

或更好 ip

if ((typeof console == "object") && (typeof console.profile == "function")) {    
   console.profile(f.constructor);    
}

適用於全部瀏覽器 字符串


#3樓

在問題概述的特定狀況下, it

typeof window.console === "undefined"

與...相同 io

window.console === undefined

我更喜歡後者,由於它更短。

請注意,咱們僅在全局範圍(在全部瀏覽器中都是window對象)中查找console 。 在這種特殊狀況下,這是可取的。 咱們不但願在其餘地方定義console

@BrianKelley在他的出色回答中解釋了技術細節。 我僅添加了缺乏的結論,並將其摘要爲更易於閱讀的內容。


#4樓

最高答案是正確的,請使用typeof。

可是,我想指出的是,在JavaScript中, undefined是可變的(出於某些不敬虔的緣由)。 所以,僅檢查varName !== undefined就有可能沒法老是按預期返回,由於其餘庫可能已更改成undefined。 一些答案(@skalee的答案)彷佛更喜歡不使用typeof ,這可能會給您帶來麻煩。

「舊」的方式來處理這個問題被宣佈不定位爲VAR,以抵消任何潛在的靜音/的壓倒一切的undefined 。 可是,最好的方法仍然是使用typeof由於它將忽略其餘代碼中全部undefined覆蓋。 尤爲是若是您正在編寫要在野外使用的代碼,那麼誰又知道該頁面上可能還會運行什麼……


#5樓

您可使用typeof運算符。

例如,

var dataSet;

alert("Variable dataSet is : " + typeof dataSet);

上面的代碼片斷將返回相似的輸出

變量dataSet是:未定義。

相關文章
相關標籤/搜索