Categorie
Javascript Programmazione

{JS} Le funzioni predefinite

JavaScript dispone di alcune funzioni predefinite, esse possono essere invocate in qualsiasi punto di uno script.
JavaScript ha un oggetto speciale, chiamato un oggetto globale (Object globale) queste funzioni appartengono ad esso.

Funzioni per convertire una stringa in valore numerico

Queste funzioni predefinite servono per convertire una stringa rispettivamente in un valore numerico intero e decimale

parseInt()

var numeroStinga = "100";
var conversioneInInt = parseInt(numeroStinga);
document.write(conversioneInInt); 
document.write("<br>" + typeof conversioneInInt);

La funzione parseInt() prevede due parametri: il primo è la stringa da convertire, mentre il secondo è opzionale, “parametro radice”, ed indica la base del sistema di rappresentazione numerica utilizzato.
Il parametro radice è utilizzato per specificare quale sistema di numerazione utilizzare per la conversione e può avere un valore da 2 a 36.
Dunque può essere ad esempio 16 (esadecimale), 8 (ottale), 2 (binario), ecc.

Se tale parametro è omesso allora, se la stringa inizia con ‘0x‘ la radice è esadecimale, se la stringa inizia con ‘0’ allora la radice è ottale, invece se la stringa inizia con un altro carattere prova a convertire la stringa in decimale.

var conversioneInInt = parseInt("13", 16);
var conversioneInInt = parseInt("13", 8);

Nel primo esempio otteniamo dunque 19, mentre nel secondo otteniamo 11.

var conversioneInInt = parseInt("Questa è un semplice stringa");

Se la stringa sottoposta a parseInt() non contiene un numero sarà restituito valore NaN (not a number)

var conversioneInInt = parseInt("5puntoZero sito web");

Se abbiamo invece una stringa che in inizia con un numero verrà preso in considerazione solo la parte numerica, quindi il numero 5; Questo però non avviene se il numero è posto al termine della stringa in quanto non viene letto e sarà restituito valore NaN.

var conversioneInInt = parseInt("5.0"); // numero con una virgola
var conversioneInInt = parseInt("5:00"); // orario
var conversioneInInt = parseInt("5-01-2021"); // data
var conversioneInInt = parseInt("5 01 2021"); // numeri con spazi

Se come primo parametro passiamo un numero con la virgola, oppure un orario, una data o ancora un numero con degli spazi vuoti avremo come risultato un numero intero che coincide con il primo numero in lettura da sinistra verso destra ovvero il numero “5”.

parseFloat()

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

Anche in questa funzione predefinita se la stringa contiene un numero all’inizio essa prederà quello altrimenti restituirà NaN.

var conversioneInFloat = parseFloat("5.50");
var conversioneInFloat = parseFloat("5,56")
var conversioneInFloat = parseFloat("5:50");
var conversioneInFloat = parseFloat("5-01-21");
var conversioneInFloat = parseFloat("5 01 20");
var conversioneInFloat = parseFloat("5anni");

Solo il primo parseFloat darà 5.5, tutti gli altri ci daranno il numero 5.

Funzioni per la verifica dei valori

isNaN()

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

var numeroStringa = "CENTO";
var verificaNatura = isNaN(numeroStringa); 
document.write(verificaNatura); 
document.write("<br>" + typeof numeroStringa);

Il risultato di isNaN sarà true ed la tipologia stampata da typeof sarà string

var verificaNatura = isNaN('13anni');
var verificaNatura = isNaN('tredici');
var verificaNatura = isNaN('13:50');
var verificaNatura = isNaN('13-01-20');
var verificaNatura = isNaN('13 01 20');
var verificaNatura = isNaN('true');

Tutti gli esempi qui sopra daranno come risultato false

var numeroStringa = "100";
var verificaNatura = isNaN(numeroStringa); 
document.write(verificaNatura); 
document.write("<br>" + typeof numeroStringa);

Mentre se passiamo un numero si numerico ma di natura stringa esso sarà interpretato come numerico e il risultato di isNaN sarà true;
Non è propriamente corretto ma per intenderci è come se vedesse la possibilità che quella stringa è convertibile in un valore numerico.

isFinite()

isFinite è una proprietà di funzione dell’oggetto globale.

È possibile utilizzare questa funzione per determinare se un numero è un numero finito. 
La funzione isFinite()esamina il numero nel suo argomento. 
Se l’argomento non è un numero (NaN), indefinito (undefined) infinito positivo o infinito negativo, restituisce false; in caso contrario, restituisce true.

var numeroNonInfinito = isFinite(Infinity);  // false
var numeroNonInfinito = isFinite(-Infinity); // false

var numeroNonInfinito = isFinite(0);         // true
var numeroNonInfinito = isFinite(910);       // true

Funzioni per la decodifica e la codifica dell’URI

Prima di spiegare il funzionamento, di decodifica e codifica, di queste due funzioni è necessario comprendere la differenza tra URL & URI

URL,URI & URN

Un generico indirizzo che appare nella barra del browser viene, con abuso di linguaggio, chiamato URL.
Ad essere precisi, le specifiche standard distinguono tra URL (Uniform Resource Locator), URI (Uniform Resource Identifier) e URN (Uniform Resource Name)

https://www.cinquepuntozero.it/cosa-sono-url-uri-urn.html

Semplificando, anche se non è propriamente corretto, possiamo pensare alla prima parte dell’indirizzo “https://www.cinquepuntozero.it/” come l’URL , la seconda parte “cosa-sono-url-uri-urn.html” come URN ed infine l’insieme formano quello che viene chiamato URI.

Da un punto di vista pratico un URL è anche un URI

Perché codificare e decodificare le URI?

La prima domanda che viene in mente è proprio perché dovremmo codificare e decodificare le URI; Il motivo è abbastanza semplice.
Dobbiamo preoccuparci della codifica e della decodifica di un URI, quando vogliamo usare un carattere riservato con un significato speciale.
Supponiamo di voler utilizzare i caratteri / e ? come parte del nome della risorsa, ovvero dell’indirizzo URI:

https://www.cinquepuntozero.it/come-scrivere-il-carattere-/-tramite-codice-ascii?.html

Per evitare ambiguità dovremo quindi occuparci della decodifica e codifica di questo indirizzo.

encodeURI()

La funzione encodeURI() effettua l’encoding di una URI in modo da renderla conforme alla direttiva del W3C.
Mediante l’encoding vengono “trasformati” mediante il percent-encoding i caratteri non ammessi (come, ad esempio, spazi e lettere accentate).
La funzione in oggetto non effettua, invece, l’encodig dei caratteri riservati come , / ? : @ & = + $ #

var url = "https://www.cinquepuntozero.it/?rèf=pd_sl_781àzcfkw6_ègrpid";
var encoUrl = encodeURI(url);
document.write(encoUrl);
document.write("<br>" + url);

Risultato

https://www.cinquepuntozero.it/?r%C3%A8f=pd_sl_781%C3%A0zcfkw6_%C3%A8grpid
https://www.cinquepuntozero.it/?rèf=pd_sl_781àzcfkw6_ègrpid
encodeURIComponent()

Qualora sia necessario effettuare l’encoding anche di questi caratteri speciali è necessario utilizzare la seconda funzione, cioè encodeURIComponent()

var url = "https://www.cinquepuntozero.it/?rèf=pd_sl_781àzcfkw6_ègrpid";
var encoUrl = encodeURIComponent(url);
document.write(encoUrl);
document.write("<br>" + url);

Risultato

https%3A%2F%2Fwww.cinquepuntozero.it%2F%3Fr%C3%A8f%3Dpd_sl_781%C3%A0zcfkw6_%C3%A8grpid
https://www.cinquepuntozero.it/?rèf=pd_sl_781àzcfkw6_ègrpid

decodeURI()

decodeURIComponent()

Esiste però un possibile problema. In alcuni casi un indirizzo viene codificato, ad esempio, per essere scritto in un database quando viene richiamato e mostrato come link dovremo occuparci della sua decodifica.
Le funzioni predefinite decodeURI() e decodeURIComponent() effettuano esattamente l’inverso di quello che abbiamo fatto finora.

Note: La codifica (encoding) di questi caratteri avviene rappresentandoli in modo alternativo usando il loro codice ASCII preceduto dal carattere % (percentuale)

escape()

unescape()

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.
Tuttavia sono ancora supportate dalla maggior parte degli engine JavaScript per questioni di compatibilità. In definitiva è meglio evitare di utilizzarle.

eval()

La funzione eval consente di eseguire stringhe di codice.
Prende come argomento una stringa e la esegue come se fosse codice JavaScript.
La stringa può rappresentare un’espressione o una serie di istruzioni.

var variabileUno = eval('1+1');
var variabileDue = eval('let i = 0; ++i');
var variabileTre = "alert('Attenzione!')";

document.write(variabileUno); // 2
document.write(variabileDue); // 1
eval(variabileTre); // Attenzione!

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.

eval() presto sarà, con buona probabilità, deprecato tanto che non è disponibile in strict mode delle specifiche più recenti dello standard ECMAScript.

Comportamenti

Contesto globale

Accede e modifica le variabili esterne

var x = 5;
eval("x = 10");
document.write(x); // 10

Contesto corrente

Accede e modifica le variabili appartenenti al contesto corrente

var a = 1;
function funzione() {
  var a = 2;
  eval('document.write(a)'); // 2
}
funzione();

Dichiarazioni al suo interno

Le dichiarazioni di variabili e funzioni all’interno di evil() sono accessibili all’esterno.

var x = 10;
eval( var y = 15; z = 20; );
document.write(y);
document.write(z);

Modalità rigorosa

In strict mode, eval viene eseguito in un contesto separato. Quindi le funzioni e le variabili dichiarate internamente, non sono visibili all’esterno.

Risorse sul web:
https://www.aziendeitalia.com/blog/l-encoding-degli-url/
https://www.mrw.it/javascript/url-encode-javascript_11255.html
https://www.html.it/pag/15212/escape-ed-unescape/

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *