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

Ibe*_*dia 1 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;
Run Code Online (Sandbox Code Playgroud)

因此,如果输出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);

    }
Run Code Online (Sandbox Code Playgroud)

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

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

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);

        }
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 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];
        //....
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于那些想知道什么是`hasOwnProperty`的人:它告诉对象是否具有属性并且它不被继承(如`toString`).更多信息:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty (3认同)