Nomi di variabili dinamiche in javascript

Ho variabile:

var variableDynamic = 1; // or var variableDynamic = 1 + i++; 

C’è un modo per usarlo per creare nomi di variabili dinamiche, ad esempio qualcosa del genere:

 var variableName + variableDynamic = {}; // or var (variableName + variableDynamic) = {}; 

So che quello che ho scritto sopra è assurdo, ma questo è per spiegare l’idea. È ansible?


Ok, cosa voglio fare per creare un elemento (modulo di caricamento) ogni volta che l’utente fa clic su aggiungi un nuovo gruppo di file, tutto funziona correttamente eccetto che il plug-in che uso richiede variabili speciali per ogni modulo di caricamento per triggersre il pulsante di caricamento (.uploadStoredFiles ();).

Questo è il codice approssimativo che ho fatto:

  $('#addOneMoreFileOrGroup').on('click', function(){ var latestFileUploaderId = parseInt($('.well-large .file-uploader').last().attr('id').split('-')[2]) + 1; $('.well-large .control-group:last').after('
\ \
\ \ ? \
\
\
'); var HERE_I_NEED_DYNAMIC_VAR = new qq.FileUploader({ element: document.getElementById('file-uploader-' + latestFileUploaderId + ''), action: 'do-nothing.htm', autoUpload: false, debug: true, uploadButtonText: ' Select Files...', onSubmit: function() { $('#file-uploader-' + latestFileUploaderId + ' .qq-uploader').after(''); $('#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'); } }); } }); }); }

In JavaScript, le proprietà di un object possono essere accessibili da obj.prop o obj['prop'] .

Nell’ambito globale, tutte le variabili sono figli della proprietà della window . Quindi sarai in grado di fare:

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

Dai un’occhiata a questo violino .

Tuttavia, se si desidera limitare l’ambito di questa variabile a una funzione, è necessario definire un object padre e utilizzarlo al posto della window .

È ansible creare variabili dinamiche con eval .

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

Date anche un’occhiata a questo: Usa nomi di variabili dinamiche in JavaScript

Per questo puoi usare eval() . Ma eval() è malvagio. Dovresti usare un array per cose come questa.

Esempio:

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

Per aggiungere alla risposta di FAngels, puoi usare la notazione delle parentesi ovunque. Ciò significa che oltre a usare window['var'] , puoi usare this['var'] .

Non penso che eval() sia necessariamente il male – a volte viene abusato. Il suo compito è prendere una stringa e “valutarla” nel codice JavaScript ( MDN ), quindi se hai bisogno di impostare le variabili in modo dinamico eval() è un metodo per farlo:

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

Probabilmente esistono metodi migliori per effettuare coppie di variabili + valore dinamiche, anche perché le stringhe di codice valutate sono implementate a livello globale, ma quanto sopra funziona. La domanda è: è il metodo migliore per ciò che vuoi ottenere (?). Vedi questo post del blog 2013 da NCZOnline per una discussione su ‘eval ()’.

Non è sicuro di capire come ciò potrebbe essere fatto nell’ambito della funzione, ma la variabile globale potrebbe essere creata in questo modo:

 window[variableName + variableDynamic] = {} 

Non penso che tu possa creare nomi di variabili dinamiche in javascript, ma puoi impostare gli attributi dell’object per stringa. Quindi se crei le tue variabili dinamiche come attributi di un object, puoi raggiungere il tuo objective.