PROGRAMMIAMO
JS - Conversioni di tipo
Variabili non tipizzate

In JS le variabili non hanno tipo. Possono cioè contenere indifferentemente:

Qui sotto vengono forniti alcuni esempi:

var num = - 20, num2 = 3.14;

nome = "mario"; //oppure nome = 'mario';

//in questo caso è obbligatorio usare i doppi apici (perch?)
paese = "Stati Uniti d'America";

completato = true;

Non essendo tipizzate, in un certo senso il tipo di una variabile viene determinato al momento dell'assegnazione (si dice che JS è un linguaggio tipizzato dinamicamente):

var anno = 2004; //in questo caso anno è un numero
anno = "2004"; //qui invece anno è una stringa

Come si può vedere dall'esempio precedente, la stessa variabile può contenere dati di tipo differente nello stesso programma, sebbene questo stile di programmazione sia fortemente sconsigliato.

Conversione esplicita a intero

Dal momento che le variabili in JS non hanno tipo, le operazioni matematiche con decimali non vengono mai approssimate. Per esempio:

var numero = 7;
mezzo = numero/2;

Il valore di mezzo al termine del precedente calcolo è 3.5

Vi sono però casi in cui si desidera operare esplicitamente con valori interi. In questi casi sono utili le tre seguenti funzioni:

Per esempio:

numero = 10/3; // vale 3.33333
arrotonda = Math.round(numero); // vale 3
difetto = Math.floor(numero); // vale 3
eccesso = Math.ceil(numero); // vale 4

 

Operatori ambigui e conversioni implicite

Il problema dell'uso di variabili non tipizzate nasce dalla presenza di alcuni operatori che sono ambigui, in quanto hanno un significato diverso a seconda del tipo di oggetto a cui sono applicati. Si consideri a questo proposito la tabella seguente:

Operatore Significato con le stringhe Significato con i valori numerici
+ Concatena (unisce) due stringhe fra loro Somma due numeri
< Minore: confronta l'ordine alfabetico Minore: confronta i valori numerici
> Maggiore: confronta l'ordine alfabetico Maggiore: confronta i valori numerici

Si confronti per esempio il funzionamento dell'operatore + nei due casi seguenti:

var1 = 12;
var2 = 3;
alert(var1 + var2);

var1 = "12";
var2 = "3";
alert(var1 + var2);

Nel primo caso viene effettuata la somma dei due numeri e dunque il risultato mostrato 15. Nel secondo caso invece, vengono concatenate insieme le due stringhe e il risultato mostrato 123.

In modo analogo si comportano gli operatori di confronto:

var1 = 12;
var2 = 3;
if (var1<var2)
    alert("var1 minore di var2");
else
    alert("var1 maggiore uguale a var2");

var1 = "12";
var2 = "3";
if (var1<var2)
    alert("var1 minore di var2");
else
    alert("var1 maggiore uguale a var2");

Nel secondo caso, contrariamente a quanto forse ci si potrebbe attendere, viene visualizzata la frase "var1 minore di var2". Infatti se var1 e var2 contengono stringhe, il confronto avviene in base all'ordine alfabetico e 12 viene prima in ordine alfabetico di 3.

Quando in una stessa espressione sono presenti variabili di tipo stringa e di tipo numerico, il JS si comporta in modo abbastanza schizofrenico. Nel caso dell'operatore +, se uno degli operandi un numero e l'altro una stringa, il JS converte il numero in una stringa e concatena tutto. Dunque:

var1 = "12";
var2 = 3;
alert(var1 + var2);

produce come risultato 123.

Invece con gli operatori di confronto, se sono presenti un numero e una stringa, il JS converte la stringa in un valore numerico. Pertanto:

var1 = "12";
var2 = 3;
if (var1<var2)
    alert("var1 minore di var2");
else
    alert("var1 maggiore uguale a var2");

visualizza che var1 maggiore o uguale a var2.

La morale che non conviene fidarsi di queste conversioni esplicite, poich possono condurre facilmente ad errori e malfunzionamenti.

Un caso particolarmente rischioso quello di un valore numerico acquisito tramite una casella di testo in un form. In questo caso il valore viene acquisito sempre come stringa. Si consideri l'esempio seguente:

var num1 = document.getElementById("val1").value;
var num2 = document.getElementById("val2").value;
alert(num1+num2)

In questo caso il risultato la concatenazione dei due valori (anche se vengono inseriti valori numerici) e non la somma, poich i valori vengono letti come stringhe dalle rispettive caselle di testo.

 

Conversione da stringa a numero: Number, parseFloat, parseInt

Ci sono molti casi in cui si vuole convertire una stringa in un valore numerico. Un caso molto frequente quello appena discusso, in cui una casella di testo contiene dei valori numerici.

Ci sono tre funzioni per effettuare la conversione da stringa a numero. La pi semplice la funzione Number() che si usa in questo modo:

var num1 = document.getElementById("val1").value;
var num1_convertito = Number(num1);

o anche semplicemente cos:

var num1 = Number(document.getElementById("val1").value);

Il significato dovrebbe essere abbastanza semplice: la stringa (o l'elemento contenente una stringa) posto fra le parentesi della funzione, viene trasformata in un valore numerico.

La funzione Number funziona bene nella maggior parte dei casi, convertendo sia valori interi sia valori decimali (col punto decimale). Esso gestisce anche il segno, convertendo dunque anche valori negativi.

ATTENZIONE:

La cosa migliore da fare convertire subito in valore numerico il contenuto delle caselle di testo e assegnarlo a una variabile (come mostrato negli esempi qui sopra). Da quel momento in poi il valore della variabile sar trattato come numerico dal JS in tutte le espressioni in cui la variabile stessa usata.

Ci sono alcuni casi particolari (stringhe contenenti caratteri oltre ai numeri o stringhe con valori numerici non in base 10) in cui la funzione Number non fornisce risultati corretti. In questi casi ci sono due altre funzioni pi potenti e specifiche:

Normalmente l'uso di queste due funzioni non necessario, dal momento che basta usare la funzione Number(). L'esempio che segue mostra un caso in cui parseInt() riesce ad effettuare la conversione, mentre Number() fallisce:

var trentini = "33 trentini entrarono a Trento";
var num = parseInt(trentini);
alert(num);

Alert visualizza in questo caso il valore numerico 33 (il resto della stringa, che contiene caratteri, non viene convertito). Come si vede si tratta di casi abbastanza particolari.

 

Conversione da numero a stringa

Meno frequente il caso in cui si abbia un valore numerico e lo si voglia convertire esplicitamente in una stringa. In questo caso la funzione da usare si chiama String():

var anno = 2015;
var anno2 = String(anno);

In questo esempio la variabile anno2 contiene anno convertito in stringa di caratteri ("2015").

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it