使用变量的名称JavaScript(字面意思)

时间:2011-05-23 23:44:31

标签: javascript variables

如何引用变量的名称(字面意思是变量的名称)?

我有以下代码:

var thisVariableName = 'path/filename.js';

var script = document.createElement('script');
script.id = **I WANT THE TEXT "thisVariableName" to be added HERE**
script.type = 'text/javascript';
script.src = thisVariableName;

因此,如果输出script.id,我会得到thisVariableName,而不是变量的值

在做出一些回应之后:

我想系统化添加许多脚本文件。 在下面的示例中,我添加了四个文件,但想象一下我必须添加30多个文件(请保留自己不要问为什么我需要添加30多个文件;毕竟这是计算的承诺)

截至目前,我知道如何完成此操作的唯一方法是创建两个单独的数组;数组1表示文件的名称字符串,数组2表示文件的路径,或者ALTERNATIVELLY,因为Felix Kling SUGGESTS为每个变量创建一个对象:

var jQueryPath = 'js/jquery-1.5.1.js';
var jQueryUICore = 'js/jquery.ui.core.js';
var jQueryUIWidget = 'js/jquery.ui.widget.js';
var jQueryUITabs = 'js/jquery.ui.tabs.js';

var fileNames = new Array ('jQueryPath','jQueryUICore','jQueryUIWidget','jQueryUITabs');

var filePaths = new Array (jQueryPath,jQueryUICore,jQueryUIWidget,jQueryUITabs);

var head = document.getElementsByTagName("head")[0]; 

for (var i=0;i<4;i++){

    var script = document.createElement('script');
    script.setAttribute('id',fileNames[i]);
    script.setAttribute('type','text/javascript');
    script.setAttribute('src', filePaths[i]);
    head.appendChild(script);

    }

因此,无论是创建数组来保存变量的名称和值,还是创建对象,都需要为每个文件单独创建两个属性。

我希望我可以引用由变量组成的数组的文字变量名称;即:

var onlyOneArray = new Array (jQueryPath,jQueryUICore,jQueryUIWidget,jQueryUITabs);

for (var i=0;i<4;i++){

        var script = document.createElement('script');
        script.setAttribute('id',**onlyOneArra[i] the NAME**);
        script.setAttribute('type','text/javascript');
        script.setAttribute('src', onlyOneArray[i]);
        head.appendChild(script);

        }

4 个答案:

答案 0 :(得分:8)

您无法在运行时获取变量的名称。

我建议采用更有条理的方法,例如:通过将变量存储为对象的属性。然后,您可以遍历此对象:

var scripts = {
    thisVariableName: 'path/filename.js'
};

for(var name in scripts) {
    if(scripts.hasOwnProperty(name)) {
        var script = document.createElement('script');
        script.id = name;
        script.type = 'text/javascript';
        script.src = scripts[name];
        //....
    }
}

更新:关于您的更改,您最终应该做的是:

var scripts = {
    jQueryPath: 'js/jquery-1.5.1.js',
    jQueryUICore: 'js/jquery.ui.core.js',
    jQueryUIWidget: 'js/jquery.ui.widget.js',
    jQueryUITabs: 'js/jquery.ui.tabs.js'
};

var head = document.getElementsByTagName("head")[0];

for(var name in scripts) {
    if(scripts.hasOwnProperty(name)) {
        var script = document.createElement('script');
        script.setAttribute('id', name);
        script.setAttribute('type', 'text/javascript');
        script.setAttribute('src', scripts[name]);
        head.appendChild(script);
   }
}

答案 1 :(得分:3)

script.id = "thisVariableName";

?你不可能在运行时创建这样的变量(这有点不可能),因此你必须已经知道变量的名称......只需将它放在一个字符串中。除非我完全误会?这是另一个脚本吗?你用不同的变量来指代它吗?你希望它被传递,然后读取名字吗?

答案 2 :(得分:0)

你不能得到变量的名称,afaik。

答案 3 :(得分:0)

您可以使用字符串作为Object对象的属性名称,也可以将它们用于eval的变量名称(即变量/激活对象的属性)。无论你做什么,你必须在某个时候将变量名与一个值相关联,那么为什么不只是一个对象:

var scripts = {
  jQueryPath: 'js/jquery-1.5.1.js',
  jQueryUICore: 'js/jquery.ui.core.js',
  jQueryUIWidget: 'js/jquery.ui.widget.js',
  jQueryUITabs: 'js/jquery.ui.tabs.js'
};

eval 等效项非常相似,除非您提供仅包含变量名称的数组并使用eval()来获取值。但是这假设变量已经被创建并通过某种机制分配值,这可能看起来非常像上面那样。此外, eval 效率非常低,当普通对象更有效地完成工作时,不推荐使用 eval