18

私は変数を持っています:

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');

                }

            });

        }
    });

});

}
4

8 に答える 8

31

JavaScript では、オブジェクトのプロパティは または のいずれかでアクセスできobj.propますobj['prop']

グローバル スコープでは、すべての変数がwindowプロパティの子です。したがって、次のことができます。

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

このフィドルをチェックしてください。

ただし、この変数のスコープを関数に限定したい場合は、親オブジェクトを定義し、これを の代わりに使用する必要がありますwindow

于 2012-11-08T15:04:36.330 に答える
16

で動的変数を作成できますeval

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

こちらもご覧ください: JavaScript で動的変数名を使用する

于 2012-11-08T15:11:57.453 に答える
5

FAngels の回答に追加するには、どこでもブラケット表記を使用できます。これは、 の使用に加えてwindow['var']、 を使用できることを意味しますthis['var']

于 2015-01-17T23:02:04.230 に答える
4

必ずしも悪だとは思いませんeval()。時々悪用されるだけです。文字列を取得し、それを JavaScript コード ( MDN ) に"評価" するのが仕事なので、変数を動的に設定する必要がある場合は、そうするための 1 つの方法です。eval()

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

// returns "some value" to the console

特に評価されたコード文字列がグローバルレベルで実装されているため、動的な変数と値のペアに影響を与えるためのおそらくより良い方法がありますが、上記は機能します。問題は、それがあなたが達成したいことに対する最良の方法であるかということです(?)。「eval()」の議論については、NCZOnline からのこの 2013 年のブログ投稿を参照してください。

于 2015-07-28T13:26:07.610 に答える
4

これには、 を使用できますeval()。しかしeval()、悪です。このようなものには配列を使用する必要があります。

例:

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

alert(myvar1337);
于 2012-11-08T15:04:07.287 に答える
3

関数スコープでそれを行う方法についてはよくわかりませんが、グローバル変数は次のように作成できます。

window[variableName + variableDynamic] = {}
于 2012-11-08T15:04:23.730 に答える
0

JavaScriptで動的変数名を作成できるとは思いませんが、文字列でオブジェクト属性を設定できます。したがって、動的変数をオブジェクトの属性として作成すると、目的を達成できます。

于 2012-11-08T15:05:07.343 に答える