2012-05-28 213 views
4

我需要在運行時發現是否存在具有給定名稱的對象,但該名稱作爲字符串存儲在變量中。檢查JS對象是否存在

例如,在我的Javascript中,我有一個名爲test的對象,然後在運行時我在文本框中輸入單詞「text」,並將該字符串存儲在一個變量中,讓我們將其命名爲input。我怎樣才能檢查一個名爲存儲在輸入變量中的字符串的變量是否存在?

+0

'typeof window [「string」] ===「object」' – noob

+1

我會添加一個&& window [「string」]!== null'來規避null的類型是對象 –

回答

6

如果對象位於全局範圍內,

var exists = (typeof window["test"] !== "undefined");

1

如果你在瀏覽器中是(即未節點):

var varName = 'myVar'; 
if (typeof(window[varName]) == 'undefined') { 
    console.log("Variable " + varName + " not defined"); 
} else { 
    console.log("Variable " + varName + " defined"); 
} 

但是,讓我說,我會覺得很很難證明在一個項目中編寫這些代碼。你應該知道你有什麼變量,除非你希望人們編寫插件到你的代碼或其他東西。

1
if(window[input])... 

所有全局變量是window對象的屬性。 []表示法允許您通過表達式獲取它們。

+0

會給出不正確的結果對於已定義但具有僞造值的變量。 – Amadan

+0

@Amadan由於我們正在測試對象,並且沒有任何對象(甚至是空的對象)都具有虛假值,所以這是完全可以接受的。 –

+0

哦,錯過了它必須成爲一個對象的部分。 – Amadan

1

如果您想查看它是否作爲全局變量存在,您可以檢查窗口對象上的成員變量。窗口是全局對象,所以它的成員是全局對象。

if (typeof window['my_objname_str'] != 'undefined') 
{ 
    // my_objname_str is defined 
} 
0

我在寫我的代碼,但不能夠永諾知道的方法存在。我根據請求加載我的js文件。另外我有方法通過ajax響應來綁定對象,並且需要知道,如果它們必須調用默認回調函數或者werther或者沒有特定的方法可用。 因此,像這樣的測試:

function doesItExist(oName){ 
    var e = (typeof window[oName] !== "undefined"); 
    return e; 
} 

是適合我。