![](/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.