如何引用变量的名称(字面意思是变量的名称)?
我有以下代码:
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);
}
答案 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 。