javascript中的动态变量名称

javascript中的动态变量名称,javascript,variables,dynamic,Javascript,Variables,Dynamic,我有一个变量: var variableDynamic = 1; // or var variableDynamic = 1 + i++; 有没有办法用它来创建动态变量名,例如: var variableName + variableDynamic = {}; // or var (variableName + variableDynamic) = {}; window[variableName + variableDynamic] = {} 我知道我上面写的是荒谬的,但这是为了解

我有一个变量:

var variableDynamic = 1;
// or    
var variableDynamic = 1 + i++;
有没有办法用它来创建动态变量名,例如:

var variableName + variableDynamic = {};
// or
var (variableName + variableDynamic) = {};
window[variableName + variableDynamic] = {}
我知道我上面写的是荒谬的,但这是为了解释这个想法。可能吗


好的,我想做的是创建元素(上传表单),每当用户单击AddNewFileGroup时,一切都正常,除了我为其使用的插件需要为每个上传表单使用特殊变量来触发上传按钮(.uploadStoredFiles();)

这是我做的粗略代码:

    $('#addOneMoreFileOrGroup').on('click', function(){

    var latestFileUploaderId = parseInt($('.well-large .file-uploader').last().attr('id').split('-')[2]) + 1;

    $('.well-large .control-group:last').after('<div class="control-group deal-type-online">  \
        <label class="control-label">File / File Group Title:</label> \
        <div class="controls"> \
            <input class="span4 file-title" type="text"> \
            <span class="question label label-warning" data-title="File / Group Name:" data-content="Name for your file or group of related files (for example your brand logotype in different file formats)." data-original-title="">?</span> \
            <div id="file-uploader-' + latestFileUploaderId + '" class="file-uploader"></div> \
        </div> \
    </div>');

    var HERE_I_NEED_DYNAMIC_VAR = new qq.FileUploader({
        element: document.getElementById('file-uploader-' + latestFileUploaderId + ''),
        action: 'do-nothing.htm',
        autoUpload: false,
        debug: true,
        uploadButtonText: '<i class="icon icon-plus"></i> Select Files...',
        onSubmit: function() {

            $('#file-uploader-' + latestFileUploaderId + ' .qq-uploader').after('<button id="file-uploader-trigger-' + latestFileUploaderId + '" class="btn btn-primary"><i class="icon-upload icon-white"></i> Upload now</button>');

            $('#file-uploader-trigger-' + latestFileUploaderId + '').on('click', function() {

                if($(this).parent().parent().parent().parent().find('.file-title').val() !== '') {
                    HERE_I_NEED_DYNAMIC_VAR.uploadStoredFiles();
                } else {

                    $(this).parent().parent().parent().addClass('error');

                }

            });

        }
    });

});

}
$('addOneMoreFileOrGroup')。在('click',function()上{
var latestFileUploaderId=parseInt($('.well large.file uploader').last().attr('id').split('-')[2])+1;
$('.well large.对照组:last')。在('\
文件/文件组标题:\
\
\
? \
\
\
');
var HERE\u I\u NEED\u DYNAMIC\u var=new qq.FileUploader({
元素:document.getElementById('file-uploader-'+latestFileUploaderId+''),
动作:'do nothing.htm',
自动上载:false,
是的,
uploadButtonText:“选择文件…”,
onSubmit:function(){
$(“#文件上传器-”+latestFileUploaderId+”.qq uploader')。之后('Upload now');
$(“#文件上载程序触发器-”+latestFileUploaderId+“”)。在('click',function()上{
if($(this).parent().parent().parent().parent().find('.file title').val()!=''){
这里需要动态变量uploadStoredFiles();
}否则{
$(this.parent().parent().parent().addClass('error');
}
});
}
});
});
}

为此,您可以使用
eval()
。但是
eval()
是邪恶的。您应该使用数组来处理类似的事情

例如:

var i = 1337;
eval('var myvar' + i + ' = \'value\';');

alert(myvar1337);

不确定如何在函数范围内完成,但全局变量可以这样创建:

var variableName + variableDynamic = {};
// or
var (variableName + variableDynamic) = {};
window[variableName + variableDynamic] = {}

在JavaScript中,对象的属性可以通过
obj.prop
obj['prop']
访问

在全局范围内,所有变量都是
窗口
属性的子项。因此,您将能够:

var variableDynamic = 'Test';
window['variableName' + variableDynamic] = 'your value';
退房


但是,如果您想将此变量的范围限制为函数,则必须定义父对象并使用它来代替
窗口

我认为您不能在javascript中创建动态变量名,但可以通过字符串设置对象属性。因此,如果您将动态变量创建为对象的属性,就可以实现您的目标。

您可以使用
eval
创建动态变量

eval("dynamic" + i + " = val[i]");

还可以看看这个:

要添加到FAngels答案中,您可以在任何地方使用括号表示法。这意味着,除了使用
窗口['var']
,您还可以使用
此['var']

我认为
eval()
不一定是邪恶的-它只是有时会被误用。它的工作是将字符串和“evaluate”转换成JavaScript代码(),因此iff您确实需要动态设置变量
eval()
是一种方法:

var t = 't';
var four = '4';
eval('var ' + (t + four) + ' = "some value";');
console.log(t4);

// returns "some value" to the console

可能有更好的方法来实现动态变量+值对,这不仅仅是因为eval已评估的代码字符串是在全局级别实现的,但上述方法确实有效。问题是,这是实现你想要的目标的最佳方法吗。有关“eval()”的讨论,请参阅。

您可以使用eval函数

var data = "anyVariableName";
eval("var temp_" + data + "=123;");
alert(temp_anyVariableName);
或者您可以使用全局
窗口
对象,或

窗口:

var data = "anyVariableName";
window["temp_" + data] = 123;
alert(window["temp_" + data]); //123
还是用圆点

var data = "anyVariableName";
window.data = 123;
alert(window.data); //123
var data = "anyVariableName";
this.data = 123;
alert(this.data); //123
这:

还是用圆点

var data = "anyVariableName";
window.data = 123;
alert(window.data); //123
var data = "anyVariableName";
this.data = 123;
alert(this.data); //123
一个真实的例子:

var tasksTableNameRandom = 'tasksTable_' + Math.random().toString(36).substr(2, 5);
console.log('Tasks Table Object name: ' + tasksTableNameRandom);
this.tasksTableNameRandom = $('#tasks-data-table').DataTable({
..
});

数组是一个问题吗?在什么情况下你想这样做?所以在最后我会得到var variableName1={}或var variableName(N+)={}的结果。我不知道数组中有多少项,它们将被动态添加。重复项:,,这很优雅,我非常喜欢。这正是我要找的。