JavaScript passo passo

Il metodo eval()

Il metodo eval(), che appartiene all'oggetto global, assume una certa importanza in JavaScript. Può risultare molto utile quando è necessario valutare una stringa che si trova in un'espressione.

Esaminiamo la casella di testo sottostante:

Utilizzando questo pulsante, verifichiamo tramite il metodo typeof() che il valore nella casella di testo nel form ci restituisce la stringa '45':

Se si desiderasse sommare questo valore ad una variabile di tipo number, come:

x=new Number(55);

si otterrebbe un presunto errore di calcolo: 4555. Questo perché non è possibile sommare automaticamente una stringa ad un numero! JavaScript concatena 45 a 55, il valore di x, che nel contesto dell'espressione viene trasformato in una stringa. Naturalmente, la variabile x rimane numerica.
Come fare?

Ci sono 2 possibilità:

  1. convertire la stringa in un numero in modo esplicito, utilizzando i metodi parseInt() o parseFloat dell'oggetto Global:
    parseInt(document.nome_form.nome_casella_di_testo.value) + x;
  2. utilizzare il metodo eval(), sempre dello stesso oggetto. 
    eval(document.nome_form.nome_casella_di_testo.value) + x;

Qual'è la differenza tra la conversione diretta in un intero e il metodo eval()?

Il metodo eval() non viene utilizzato per operare conversioni: il suo scopo è in realtà quello di valutare la funzione di una stringa nel contesto di un'espressione, e trasformarla in un dato stringa, in un numero o in un oggetto secondo la funzione nell'espressione considerata.
Un esempio piuttosto interessante è il seguente. Lavorando con l'elemento di un form f1, come la casella di testo vista in precedenza, T1, il valore della casella di testo può essere richiamato nel seguente modo:

document.f1.T1.value;

Se è necessario lavorare con uno script complesso, si potrebbero dover gestire varie caselle di testo: T1, T2, T3, ....., Tn.
Nel caso in cui venga utilizzato un indice i, che parte da 1, non sarebbe possibile scrivere:

document.f1.T +1+.value;

codice che non potrebbe mai funzionare, perché altro non sarebbe se non un errore di sintassi.
Allora, si ricorre al metodo eval() nel seguente modo:

eval("document.f1.T"+1+".value");

che trasforma in oggetto document.f1.T1, ovvero la casella di testo del form f1, e ne valuta il valore dell'attributo value.

chiudi la finestra