Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 18 di 112
  • livello avanzato
Indice lezioni

Funzioni predefinite

JavaScript dispone di alcune funzioni predefinite che risultano utili in alcune attività. Esse possono essere invocate in qualsiasi punto di uno script
JavaScript dispone di alcune funzioni predefinite che risultano utili in alcune attività. Esse possono essere invocate in qualsiasi punto di uno script
Link copiato negli appunti

JavaScript dispone di alcune funzioni predefinite che risultano utili in alcune attività. Esse possono essere invocate in qualsiasi punto di uno script senza particolari distinzioni dalla chiamata di una funzione definita da noi.

parseInt e parseFloat

Abbiamo già avuto modo di vedere le funzioni parseInt() e parseFloat() per convertire una stringa rispettivamente in un valone numerico intero e decimale.

Ricordiamo brevemente che la funzione parseInt() prevede due parametri: il primo è la stringa da convertire, mentre il secondo è opzionale e indica la base del sistema di rappresentazione numerica utilizzato.

La funzione parseFloat() invece prevede un solo argomento e restituisce un valore numerico intero o decimale in base alla presenza del separatore decimale.

isNaN e isFinite

Rimanendo sempre nell'ambito dei numeri abbiamo le funzioni isNaN() e isFinite().

La funzione isNaN() prende un argomento e restituisce true se il suo valore è NaN, cioè non è un valore numerico valido, false altrimenti.

Analogamente, isFinite() restituisce true se il valore del suo argomento è diverso da Infinity e da NaN.

escape e unescape

Date le sue origini strettamemte legate al Web, JavaScript mette a disposizione una serie di funzioni predefinite per la codifica e decodifica di stringhe destinate a viaggiare sulla rete.

In particolare la funzione escape() restituisce la codifica una stringa lasciando inalterate cifre, lettere e i caratteri +-*/._@ e rimpiazzando tutti gli altri caratteri con la codifica esadecimale preceduta da un carattere percentuale (%). Il seguente è un esempio di uso della funzione escape():

var stringa = escape("Questa è una stringa!");

La variabile stringa conterrà il valore Questa%20%E8%20una%20stringa%21 dove al posto degli spazi, della e accentata e del punto esclamativo è stata sostituita la corrispondente codifica esadecimale.

La funzione unescape() esegue il procedimento contrario convertendo le codifiche esadecimali nei corrispondenti caratteri ASCII.

Funzioni deprecate

Le funzioni escape() e unescape() sono considerate obsolete sin dalla versione 3 dello standard ECMAScript. Esse vengono migliorate e sostituite dalle funzioni di codifica e decodifica degli URI, che stiamo per vedere, tuttavia sono ancora supportate dalla maggior parte degli engine JavaScript per questioni di compatibilità. In definitiva è meglio evitare di utilizzarle e preferire le funzioni come encodeURI che stiamo per esaminare.

encodeURI e decodeURI

Quando una stringa rappresenta un URI non è opportuno utilizzare la funzione escape() per la codifica, in quanto verrebbero codificati alcuni caratteri speciali, come ad esempio ? e #, che hanno un significato speciale. In presenza di un URI utilizziamo la funzione encodeURI() che esclude dalla codifica i caratteri , /?:@&=+$#. Nel seguente esempio:

var escapedURI = escape("https://www.html.it/a b.html");
var encodedURI = encodeURI("https://www.html.it/a b.html");

la variabile escapedURI avrà il valore http%3A//www.html.it/a%20b.html mentre encodedURI conterrà il valore https://www.html.it/a%20b.html.

La controparte di encodeURI() è la funzione decodeURI() che, come è intuibile, restituisce la stringa decodificata.

encodeURIComponent e decodeURIComponent

La funzione encodeURIComponent() codifica anche i caratteri speciali esclusi dalla encodeURI(). Essa è pensata per codificare i valori di eventuali parametri passati in un URI, come mostrato nel seguente esempio:

var param = encodeURIComponent("Che cos'è?");
var encodedURI = encodeURI("https://www.html.it/a b.php?x=") + param;

Il valore finale della variabile encodedURI sarà:

https://www.html.it/a%20b.php?x=Che%20cos'%C3%A8%3F

Da notare come il valore originario codificato da encodeURIComponent() conteneva il simbolo del punto interrogativo (?) che se non codificato avrebbe generato un URI malformato.

Come è presumibile, la corrispondente funzione per la decodifica è decodeURIComponent().

eval

Tra le funzioni predefinite, eval() ha un ruolo controverso. Essa prende come argomento una stringa e la valuta o la esegue come se fosse codice JavaScript. La stringa può rappresentare un'espressione o una serie di istruzioni, come mostrato nel seguente esempio:

var x = eval("5 + 1");
var z = eval("x + 1");
eval("var a = 4; a = a *3;");
a = a + 1;

La prima istruzione valuta un'espressione numerica e la assegna alla variabile x, che assume quindi il valore di 6. La seconda istruzione valuta una stringa che contiene la variabile x incrementandone il valore di uno. La variabile z avrà il valore di 7. Questo ci fa capire che lo scope di riferimento di eval() è lo scope corrente.

Infine l'ultima invocazione di eval() esegue due istruzioni JavaScript creando nello scope corrente la variabile a il cui valore finale sarà 13.

Le potenzialità di eval() sono enormi, dal momento che mette a disposizione del programmatore un vero e proprio interprete JavaScript. Insieme alle potenzialità anche il pericolo di avere risultati inattesi e non facilmente controllabili è alto, tanto che è stato detto che eval is evil.

Diciamo che in linea di massima è opportuno evitare di utilizzare questa funzione perchè può creare più problemi di quelli che vorrebbe risolvere. In questa direzione si muovono anche le specifiche più recenti dello standard ECMAScript, tanto che non è disponibile in strict mode.

I nomi di funzioni

A differenza delle parole chiavi di JavaScript, come i nomi delle istruzioni ed altri nomi riservati, i nomi delle funzioni predefinite non sono riservati. Questo vuol dire che se tentiamo di definire una nostra funzione eval() o parseInt() non riceveremo un messaggio d'errore, ma ridefiniremo una nostra versione della funzione. Questo è un aspetto da tenere presente quando si sceglie il nome di una funzione. Riutilizzare il nome di una funzione predefinita o già definita in precedenza annulla la definizione precedente rimpiazzandola con la nuova.

Ti consigliamo anche