Динамические имена переменных в 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');

                }

            });

        }
    });

});

}

Ответ 1

В JavaScript свойства объекта могут быть доступны либо через obj.prop, либо obj['prop'].

В глобальном масштабе все переменные являются дочерними элементами свойства window. Таким образом, вы сможете:

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

Отметьте эту скрипту.

Однако, если вы хотите ограничить область действия этой переменной функцией, вам нужно будет определить родительский объект и использовать это вместо window.

Ответ 3

Для этого вы можете использовать eval(). Но eval() - зло. Вы должны использовать массив для таких вещей.

Пример:

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

alert(myvar1337);

Ответ 4

Чтобы добавить к ответу FAngels, вы можете использовать нотацию в любом месте. Это означает, что в дополнение к использованию window['var'] вы можете использовать this['var'].

Ответ 5

Я не думаю, что eval() является злом обязательно - иногда это иногда злоупотребляет. Задача состоит в том, чтобы взять строку и eval uate "в код JavaScript ( MDN), поэтому iff вам нужно динамически устанавливать переменные eval() - это один из способов:

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

// returns "some value" to the console

Вероятно, существуют более эффективные методы для создания пар динамических переменных + значений, не в последнюю очередь потому, что eval uated code-strings реализованы на глобальном уровне, но вышеописанное работает. Вопрос в том, лучший ли он для того, чего вы хотите достичь (?). См. в этом блоге в 2013 году из NCZOnline для обсуждения` eval() '.

Ответ 6

Не уверен, что это можно сделать в области функций, но глобальная переменная может быть создана следующим образом:

window[variableName + variableDynamic] = {}

Ответ 7

Я не думаю, что вы можете создавать имена динамических переменных в javascript, но вы можете установить атрибуты объектов по строкам. Поэтому, если вы создаете свои динамические переменные в качестве атрибутов объекта, вы можете достичь своей цели.