4

我需要在运行时发现是否存在具有给定名称的对象,但该名称作为字符串存储在变量中。

例如,在我的 Javascript 中,我有一个名为 test 的对象,然后在运行时我将单词“text”写在一个框中,并将这个字符串存储在一个变量中,我们将其命名为 input。如何检查是否存在以存储在输入变量中的字符串命名的变量?

4

5 回答 5

6

如果对象在全局范围内;

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

于 2012-05-28T16:25:10.637 回答
1

如果您在浏览器中(即不是节点):

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

但是,让我说,我很难证明在项目中编写此代码是合理的。您应该知道您拥有哪些变量,除非您希望人们为您的代码或其他东西编写插件。

于 2012-05-28T16:24:12.990 回答
1
if( window[input])...

所有全局变量都是window对象的属性。[]表示法允许您通过表达式获取它们。

于 2012-05-28T16:24:37.360 回答
1

如果要查看它是否作为全局变量存在,可以检查窗口对象上的成员变量。window 是全局对象,所以它的成员是全局的。

if (typeof window['my_objname_str'] != 'undefined')
{
    // my_objname_str is defined
}
于 2012-05-28T16:25:09.483 回答
0

我正在编写我的代码,但并非总是可以知道方法是否存在。我根据请求加载我的 js 文件。此外,我有“通过”ajax 响应绑定对象的方法,并且需要知道它们是否必须调用默认回调或者是否有特定的方法可用。所以像这样的测试:

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

适合我。

于 2016-06-05T03:48:27.180 回答