I metodi e gli operatori
Parola chiave typeof
per l’identificazione del tipo di dato
E’ possibile identificare il tipo di una variabile utilizzando la parola chiave typeof
.
Supponendo di aver dichiarato le seguenti variabili:
'use strict'
// variabili primitive
let naturalNumber = 10;
let realNumber = 10.5;
let toBeOrNotToBe = true;
let word = "paragraph";
var undefinedThing = undefined;
let thing = null;
// variabili wrapper
var naturalNumberObj = new Number(10);
let realNumberObj = new Number(10.5);
let toBeOrNotToBeObj = new Boolean(true);
let wordObj = new String("paragraph");
Il codice necessario ad individuare i tipi di dato delle variabili dichiarate è il seguente:
typeof naturalNumber;
// restituiscenumber
typeof realNumber;
// restituiscenumber
typeof toBeOrNotToBe;
// restituisceboolean
typeof word;
// restituiscestring
typeof undefinedThing;
// restituisceundefined
typeof thing;
// restituisceobject
typeof naturalNumberObj;
// restituisceobject
typeof realNumberObj;
// restituisceobject
typeof toBeOrNotToBeObj;
// restituisceobject
typeof wordObj;
// restituisceobject
Come si può notare, sia la variabile oggetto, sia le variabili con valore null
, sia la variabile sia tutte le variabili “wrapper” sono di tipo oggetto.
Una precisazione però è da fare sulla variabile inizializzata a null
: la specifica di ECMAScript prevede che, nonostante la variabile sia da considerare come tipo “null”, l’operazione typeof null
restituisca object
.
Conversione da numero a stringa
Per quanto concerne la conversione di un numero in formato stringa, è possibile utilizzare il metodo toString()
dei tipi numerici, come nel seguente esempio:
let x = 1;
let stringX = x.toString();
E’ possibile convertire il numero in una base specificata passando come argomento al metodo toString()
la base in cui si vuole convertire il numero.
Ad esempio, per la conversione in binario, ottale ed esadecimale si usa il seguente codice:
let x = 10;
let x2 = (10).toString(2);
let x8 = x.toString(8);
let x16 = x.toString(16);
Il codice converte il numero nelle seguenti stringhe:
x2 = "1010"
x8 = "12"
x16 = "a"
Nel caso di numeri negativi, si può effettuare una conversione in complemento a 2, utilizzando il seguente codice:
let x = -1;
let xC2 = (x >>> 0).toString()
Il numero è convertito in una stringa rappresentata da 32 bit:
xC2 = "11111111111111111111111111111111"
Per la conversione in formato esponenziale si utilizza il metodo toExponential()
, come nel seguente esempio:
let x = 1;
let y = 1.4;
let w = 14;
let z = 123456789.123456;
let stringX = x.toExponential();
let stringY = y.toExponential();
let stringW = w.toExponential();
let stringZ = z.toExponential();
Il codice converte il numero nelle seguenti stringhe:
"1e+0"
"1.4e+0"
"1.4e+1"
"1.2346e+8"
Si può passare al metodo il parametro opzionale indicante il numero di cifre decimali da utilizzare per la mantissa, come nel seguente esempio:
let z = 123456789.123456;
let stringZ = z.toExponential(2);
let stringZ = z.toExponential(8);
let stringZ = z.toExponential(16);
Il codice converte il numero nelle seguenti stringhe:
"1.23e+8"
"1.23456789e+8"
"1.2345678912345600e+8"
Operazioni ed operatori per le stringhe
Diversi operatori possono lavorare sulle stringhe:
Simbolo operatore | Operatore | Esempio d’uso |
---|---|---|
+ |
concatenazione tra due stringhe | x = "una " + "stringa." |
== |
confronto di eguaglianza di due stringhe | "una " == "stringa" |
> |
confronto di due stringhe in base all’ordinamento naturale | "una " > "stringa" |
>= |
confronto di due stringhe in base all’ordinamento naturale | "una " >= "stringa" |
< |
confronto di due stringhe in base all’ordinamento naturale | "una " < "stringa" |
<= |
confronto di due stringhe in base all’ordinamento naturale | "una " <= "stringa" |
Per tutte le altre operazioni sulle stringhe si utilizzano le proprietà ed i metodi dell’oggetto String
. Tutte le stringhe sono istanze di questo oggetto (come le istanze di una classe nella programmazione OOP), e quindi le proprietà ed i metodi di questo oggetto String
sono disponibili alle istanze.
L’unica proprietà disponibile nelle stringhe è length
, ed è di sola lettura.
Proprietà | Operazione | Esempio d’uso |
---|---|---|
lenghth |
lunghezza della stringa | "Questa è una stringa".length |
I metodi disponibili sono numerosissimi, per un elenco completo si rimanda alla documentazione della classe String
. Di seguito un elenco dei metodi più utilizzati:
Metodi | Operazione | Esempio d’uso |
---|---|---|
charAt(index) |
restituisce il carattere alla posizione passata come argomento | "Questa è una stringa".charAt(0) |
endsWith(stringa) |
indica se termina con la stringa passata come argomento | "Questa è una stringa".endsWith("inga") |
indexOf(stringa) |
restituisce l’indice in cui appare la stringa passata come argomento | "Questa è una stringa".indexOf("inga") |
lastIndexOf(stringa) |
restituisce l’ultimo indice in cui appare la stringa passata come argomento | "Questa è una stringa".lastIndexOf("ga") |
replace(stringa1, stringa2) |
sostituisce tutte le occorrenze della prima stringa passata come argomento con la seconda stringa passata come argomento | "Questa è una stringa".replace("a", "altra stringa") |
startsWith(stringa) |
indica se inizia con la stringa passata come argomento | "Questa è una stringa".startsWith("inga") |
substring(inizio, fine) |
restituisce la stringa inclusa tra le posizioni di inizio e fine | "Questa è una stringa".substring(1,4) |
toLowerCase() |
restituisce la stringa con tutti i caratteri in minuscolo | "Questa è una stringa".toLowerCase() |
toUpperCase() |
restituisce la stringa con tutti i caratteri in maiuscolo | "Questa è una stringa".toUpperCase() |
trim() |
rimuove tutti gli spazi iniziali e finali | "Questa è una stringa".trim() |
Costanti e funzioni matematiche
Per tutte le altre operazioni sui numeri si utilizzano le proprietà ed i metodi della libreria Math
e dell’oggetto Number
.
Le costanti ed i metodi resi disponibili dalla libreria Math
sono numerosissimi, per un elenco completo si rimanda alla documentazione della libreria. Di seguito un elenco delle costanti e dei metodi più utilizzati:
Costante | Operazione | Esempio d’uso |
---|---|---|
Math.E |
Costante e di Eulero / Nepero | "La costante E vale" + Math.E |
Math.PI |
Costante Π (pi greco) / Costante di Archimede | "La costante Π vale" + Math.PI |
Math.SQRT2 |
Valore della radice quadrata di 2 | "La costante SQRT2 vale" + Math.SQRT2 |
Metodi | Operazione | Esempio d’uso |
---|---|---|
abs(x) |
restituisce il valore assoluto del numero x | Math.abs(-2) |
cbrt(x) |
restituisce la radice cubica del numero x | Math.cbrt(-2) |
ceil(x) |
restituisce l’arrotondamento di x al numero intero più grande | Math.ceil(-2.12) |
cos(x) |
restituisce il coseno dell’angolo x (espresso in radianti) | Math.cos(-2) |
exp(x) |
restituisce l’esponenziale in base E del numero x | Math.exp(2) |
floor(x) |
restituisce l’arrotondamento di x al numero intero più piccolo | Math.floor(-2) |
log(x) |
restituisce il logaritmo in base E del numero x | Math.log(2) |
max(x, y, w, ...) |
restituisce il maggiore dei valori passati come argomento | Math.max(-2, 3, 4, -8) |
min(x, y, w, ...) |
restituisce il minore dei valori passati come argomento | Math.min(-2, 3, 4, -8) |
pow(x, y) |
restituisce il valore di x elevato ad y | Math.pow(2, 3) |
random() |
restituisce un valore casuale tra zero ed uno | Math.random() |
round(x) |
restituisce l’arrotondamento di x al numero intero più vicino | Math.round(3.12) |
sin(x) |
restituisce il seno dell’angolo x (espresso in radianti) | Math.sin(2) |
sqrt(x) |
restituisce la radice quadrata di x | Math.sqrt(2) |
trunc(x) |
restituisce il valore di x senza la parte decimale | Math.trunc(3.2) |
Le costanti e i metodi numerici
Le costanti ed i metodi comunemente utilizzati dell’oggetto Number
sono di seguito descritti:
Costante | Operazione | Esempio d’uso |
---|---|---|
Number.NaN |
Valore speciale indicante ‘Not a Number’ | "Il valore NaN vale" + Number.NaN |
Number.NEGATIVE_INFINITY |
Valore speciale indicante ‘Infinito negativo’ | " -Infinito " + Number.NEGATIVE_INFINITY |
Number.POSITIVE_INFINITY |
Valore speciale indicante ‘Infinito positivo’ | " +Infinito " + Number.POSITIVE_INFINITY |
Metodi | Operazione | Esempio d’uso |
---|---|---|
isNaN() |
indica se il valore è ‘NaN’ | Number.isNaN(-2) |
isFinite()() |
indica se il valore è un numero finito | Number.isFinite() |
isInteger() |
indica se il valore è un numero intero | Number.isInteger() |
parseFloat(string) |
converte la stringa in un numero decimale | Number.parseFloat("2.15") |
parseInt(string) |
converte la stringa in un numero intero | Number.parseInt("2.15") |
La data e l’orario
Le variabili possono aver assegnata una data ed un orario. Questi tipi di dati di uso molto comune sono oggetti che rappresentano un singolo momento temporale in un formato indipendente dalla piattaforma.
La rappresentazione di date e orari su internet deve seguire le regole dello standard internazionale ISO 8601 Information interchange - Representation of dates and times. Questo standard nasce per risolvere problemi di comprensione dei formati di date e ore utilizzati nei vari paesi, ad esempio la data rappresentata con 04-09-03 può indicare il:
- 4 settembre 2003 (o addirittura 1903) in Europa e altri Paesi,
- 9 aprile 2003 negli Stati Uniti d’America,
- 3 settembre 2004 secondo lo standard ISO 8601.
Il formato in cui scrivere date e ore deve essere YYYY
-MM
-DD
Thh
:mm
:ss
.KKK
, con il seguente significato:
YYYY
: Anno;MM
: Mese;GG
: Giorno;- T: è un carattere di separazione, deve essere inserito per separare la data dall’ora;
hh
: Ora;mm
: Minuti;ss
: Secondi;kkk
: Millisecondi.
Alcuni campi possono essere omessi, per maggiori informazioni si rimanda alle specifiche del W3C.
Per creare un oggetto che memorizza il momento temporale:
const date2 = new Date();
const date1 = new Date('1995-12-17T03:24:00');
Per convertire la data in una rappresentazione testuale localizzata:
let orario1 = date.toLocaleString('en-US'); // 2/11/2020, 1:04:52 PM
let orario2 = date.toLocaleString('en-GB'); // 11/02/2020, 13:04:52
Per convertire la data in una rappresentazione testuale localizzata e specificare il formato:
let orario1 = date.toLocaleString('en-US'); // 2/11/2020, 1:04:52 PM
let orario2 = date.toLocaleString('it-IT', {
'dateStyle': 'long',
'timeStyle': 'long'
}); // 11 aprile 2024 alle ore 19:19:15 UTC
console.log(new Date().toLocaleString('it-IT', {'dateStyle': 'full', 'timeStyle': 'full'}))
Le proprietà dateStyle
e timeStyle
possono essere specificate per indicare il formato della data e dell’ora, non necessariamente devono essere inserite entrambe, possono assumere uno dei seguenti valori:
full
indica tutti i dati in formato testuale completo, ad esempiogiovedì 11 aprile 2024 alle ore 19:20:42 Tempo coordinato universale
;long
indica tutti i dati in formato testuale abbreviato, ad esempio11 aprile 2024 alle ore 19:21:18 UTC
;medium
indica tutti i dati in formato numerico, ad esempio11 apr 2024, 19:21:18
;short
indica tutti i dati in formato numerico ridotto, ad esempio11/04/24, 19:21
.
Se si vuole specificare il formato solo per una parte della data e dell’orario, si possono utilizzare le seguenti proprietà:
-
day
,month
,year
,hour
,minute
,second
permettono di visualizzare il campo numerico nel formato seguente:numeric
a una o due cifre;2-digit
sempre a due cifre (ad esempio03
).
-
fractionalSecondDigits
permette di visualizzare il numero di millisecondi nei seguenti formati:1
: una sola cifra;2
: due cifre;3
: tre cifre;
-
hour12
visualizza l’ora nel formato a 12 o 24 ore:true
: con 12 ore e indicatori AM e PM;false
: con 24 cifre;
-
weekday
,era
,month
,dayPeriod
etimeZoneName
permettono di visualizzare il nome del campo in uno dei seguenti formati:long
nome completo del campo;short
nome abbreviato del campo;narrow
iniziale del nome del campo;
Ad esempio, per specificare data e ora con le informazioni “aprile 2024 dopo Cristo sabato alle ore 14:35:50,777” è necessario specificare le seguenti proprietà:
console.log(new Date().toLocaleString('it-IT', {
'era': 'long',
'year': 'numeric',
'month': 'long',
'weekday': 'long',
'hour': 'numeric',
'minute': 'numeric',
'second': 'numeric',
'fractionalSecondDigits': '3',
'hour12': false
}));
I metodi getter con parametri per le date in JavaScript sono:
getFullYear()
: Restituisce l’anno della data.getMonth()
: Restituisce il mese della data (0-11).getDate()
: Restituisce il giorno del mese della data (1-31).getDay()
: Restituisce il giorno della settimana della data (0-6, dove 0 è Domenica e 6 è Sabato).getHours()
: Restituisce l’ora della data (0-23).getMinutes()
: Restituisce i minuti della data (0-59).getSeconds()
: Restituisce i secondi della data (0-59).getMilliseconds()
: Restituisce i millisecondi della data (0-999).
I metodi setter con parametri per le date in JavaScript sono:
setFullYear(year)
: Imposta l’anno della data.setMonth(month)
: Imposta il mese della data (0 per gennaio, 1 per febbraio, ecc.).setDate(day)
: Imposta il giorno del mese della data.setHours(hours)
: Imposta le ore della data (0-23).setMinutes(minutes)
: Imposta i minuti della data (0-59).setSeconds(seconds)
: Imposta i secondi della data (0-59).setMilliseconds(milliseconds)
: Imposta i millisecondi della data (0-999).