簡體   English   中英

javascript中的動態變量名稱

[英]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.propobj['prop']訪問對象的屬性。

在全局范圍內,所有變量都是window屬性的子級。 這樣您就可以執行以下操作:

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

看看這個小提琴

但是,如果您想將此變量的范圍限制為某個函數,則必須定義一個父對象並使用它代替window

您可以使用eval創建動態變量。

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

還可以看一下: 在JavaScript中使用動態變量名

為此,您可以使用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

可能有更好的方法來實現動態變量+值對,不僅因為評估的代碼字符串是在全局級別實現的,但上述方法確實有效。 問題是,這是您想要實現的最佳方法嗎? 請參閱NCZOnline2013年發布的此博客,以獲取有關“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM