![](/img/trans.png)
[英]Javascript: creating dynamic variables and object names. / html5 localstorage
[英]Dynamic variables names in javascript
我有变量:
var variableDynamic = 1;
// or
var variableDynamic = 1 + i++;
有什么方法可以使用它来创建动态变量名称,例如这样的:
var variableName + variableDynamic = {};
// or
var (variableName + variableDynamic) = {};
我知道我上面写的很荒谬,但这是为了解释这个想法。 是否可以?
好的,每次用户单击添加新文件组时,我想做什么来创建元素(上传表单),一切正常,除了我使用的插件需要每个上传表单的特殊变量才能触发上传按钮(.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');
}
});
}
});
});
}
在JavaScript中,可以通过obj.prop
或obj['prop']
访问对象的属性。
在全局范围内,所有变量都是window
属性的子级。 这样您就可以执行以下操作:
var variableDynamic = 'Test';
window['variableName' + variableDynamic] = 'your value';
看看这个小提琴 。
但是,如果您想将此变量的范围限制为某个函数,则必须定义一个父对象并使用它代替window
。
为此,您可以使用eval()
。 但是eval()
是邪恶的。 您应该为此类使用数组。
例:
var i = 1337;
eval('var myvar' + i + ' = \'value\';');
alert(myvar1337);
要添加到Fangels答案中,您可以在任何地方使用方括号表示法。 这意味着除了使用window['var']
,您还可以使用this['var']
。
我不认为eval()
是邪恶的-有时会被滥用。 它的作用是接受一个字符串和“EVAL审视你们”成JavaScript代码( MDN ),所以当且仅当你需要设置变量动态eval()
是这样做的一个方法:
var t = 't';
var four = '4';
eval('var ' + (t + four) + ' = "some value";');
console.log(t4);
// returns "some value" to the console
可能有更好的方法来实现动态变量+值对,不仅因为评估的代码字符串是在全局级别实现的,但上述方法确实有效。 问题是,这是您想要实现的最佳方法吗? 请参阅NCZOnline在2013年发布的此博客,以获取有关“ eval()”的讨论。
不确定是否可以在函数范围内完成此操作,但是可以这样创建全局变量:
window[variableName + variableDynamic] = {}
我认为您无法在javascript中创建动态变量名称,但可以按字符串设置对象属性。 因此,如果将动态变量创建为对象的属性,则可以实现目标。
您可以使用 eval 函数
var data = "anyVariableName";
eval("var temp_" + data + "=123;");
alert(temp_anyVariableName);
或者你可以使用全局window
对象,或者this
:
窗户:
var data = "anyVariableName";
window["temp_" + data] = 123;
alert(window["temp_" + data]); //123
或使用点
var data = "anyVariableName";
window.data = 123;
alert(window.data); //123
这个:
ar data = "anyVariableName";
this["temp_" + data] = 123;
alert(this["temp_" + 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({
..
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.