2012-05-28 45 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; 
} 

是适合我。