Operatori booleani ECMAScript

Gli operatori booleani sono molto importanti, poiché permettono al linguaggio di programmazione di funzionare correttamente.

Gli operatori booleani hanno tre tipi: NOT, AND e OR.

Operazione ToBoolean

Prima di studiare vari operatori logici, diamo un'occhiata all'operazione ToBoolean descritta nella specifica ECMAScript-262 v5.

L'operazione astratta ToBoolean converte i suoi parametri secondo le regole riportate nella tabella sottostante:

Tipo di parametro Risultato
Non definito false
Null false
Booleano Il risultato è uguale al parametro di input (senza conversione)
Numero Se il parametro è +0, -0 o NaN, il risultato è false; altrimenti è true.
Stringa Se il parametro è una stringa vuota, il risultato è false; altrimenti è true.
Oggetto true

Operatore logico NOT

In ECMAScript, l'operatore NOT logico è lo stesso di quello di C e Java, e viene rappresentato dal simbolo di exclamazione (!).

Diversamente dagli operatori OR e AND logici,L'operatore NOT logico restituisce sempre un valore Booleano.

Il comportamento dell'operatore NOT logico è il seguente:

  • Se l'operando è un oggetto, viene restituito false
  • Se l'operando è il numero 0, viene restituito true
  • Se l'operando è qualsiasi numero diverso da 0, viene restituito false
  • Se l'operando è null, viene restituito true
  • Se l'operando è NaN, viene restituito true
  • Se l'operando è undefined, si verifica un errore

Di solito, l'operatore viene utilizzato per controllare i cicli:

var bFound = false;
var i = 0;
while (!bFound) {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  } else {
    i++;
  }
}

In questo esempio, la variabile Booleana (bFound) viene utilizzata per registrare se la ricerca è stata riuscita. Quando viene trovato l'elemento di dati nel problema, bFound viene impostato su true, !bFound è uguale a false, il che significa che l'esecuzione esce dal ciclo while.

Quando si giudica il valore Boolean di una variabile ECMAScript, si può anche utilizzare l'operatore NOT logico. Per fare questo, è necessario utilizzare due operatori NOT in una singola riga di codice. L'operatore NOT iniziale restituisce un valore Booleano. Il secondo NOT negherà questo valore Booleano, fornendo così il vero valore Booleano della variabile.

var bFalse = false;
var sRed = "red";
var iZero = 0;
var iThreeFourFive = 345;
var oObject = new Object;
document.write("Il valore logico di bFalse è " + (!!bFalse));
document.write("Il valore logico di sRed è " + (!!sRed));
document.write("Il valore logico di iZero è " + (!!iZero));
document.write("Il valore logico di iThreeFourFive è " + (!!iThreeFourFive));
document.write("Il valore logico di oObject è " + (!!oObject));

Risultato:

Il valore logico di bFalse è false
Il valore logico di sRed è true
Il valore logico di iZero è false
Il valore logico di iThreeFourFive è true
Il valore logico di oObject è true 

Operatore logico AND

In ECMAScript, l'operatore logico AND è rappresentato dal doppio e (&&):

Ad esempio:

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

La tabella di verità seguente descrive il comportamento dell'operatore logico AND:

Operando 1 Operando 2 Risultato
true true true
true false false
false true false
false false false

Gli operandi dell'operazione logica AND possono essere di qualsiasi tipo, non solo valori Booleani.

Se uno degli operandi non è un valore Booleano originale, l'operazione logica AND non necessarily restituisce un valore Booleano:

  • Se uno degli operandi è un oggetto e l'altro è un valore Booleano, viene restituito l'oggetto.
  • Se entrambi gli operandi sono oggetti, viene restituito il secondo oggetto.
  • Se uno degli operandi è null, viene restituito null.
  • Se uno degli operandi è NaN, viene restituito NaN.
  • Se un operando è undefined, si verifica un errore.

Simile all'operazione logica AND in Java, l'operazione logica AND in ECMAScript è un'operazione semplificata, ossia se il primo operando determina il risultato, il secondo operando non viene più calcolato. Per l'operazione logica AND, se il primo operando è false, il risultato non può mai essere true indipendentemente dal valore del secondo operando.

Consideriamo l'esempio seguente:

var bTrue = true;
var bResult = (bTrue && bUnknown); // Si verifica un errore
alert(bResult); // Questa riga non viene eseguita

Questo pezzo di codice lancia un errore durante l'operazione logica AND, poiché la variabile bUnknown è undefined. Il valore della variabile bTrue è true, poiché l'operazione logica AND continua a calcolare la variabile bUnknown. Questo comportamento lancia un errore, poiché il valore di bUnknown è undefined e non può essere utilizzato nell'operazione logica AND.

Se si modifica questo esempio, impostando il primo numero su false, non si verificherà alcun errore:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult); // Output: "false"

In questo pezzo di codice, lo script esegue l'operazione logica AND e restituisce il valore, ovvero la stringa "false". Anche se il valore della variabile bUnknown è undefined, non viene calcolato, poiché il valore del primo operando è false.

Suggerimento:Quando si utilizza l'operatore logico AND, è necessario ricordare questa caratteristica di calcolo semplice.

Operatore logico OR

L'operatore logico OR in ECMAScript è lo stesso di quello in Java, rappresentato da due barre verticali (||):

var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;

La tabella di verità seguente descrive il comportamento dell'operatore logico OR:

Operando 1 Operando 2 Risultato
true true true
true false true
false true true
false false false

Simile all'operatore logico AND, se un operando non è un valore Booleano, l'operazione logica OR non restituisce necessariamente un valore Booleano:

  • Se un operando è un oggetto e tutti i valori degli operandi a sinistra dell'oggetto sono false, viene restituito l'oggetto.
  • Se entrambi gli operandi sono oggetti, viene restituito il primo oggetto.
  • Se l'ultimo operando è null e tutti gli altri valori degli operandi sono false, viene restituito null.
  • Se l'ultimo operando è NaN e tutti gli altri valori degli operandi sono false, viene restituito NaN.
  • Se un operando è undefined, si verifica un errore.

Come l'operatore logico AND, l'operazione logica OR è anche un'operazione semplice. Per l'operatore logico OR, se il primo valore dell'operazione è true, non si calcola più il secondo valore.

Ad esempio:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//Output "true"

Come nell'esempio precedente, la variabile bUnknown è non definita. Tuttavia, poiché il valore della variabile bTrue è true, bUnknown non viene calcolato, quindi viene restituito "true".

Se si cambia bTrue in false, si verifica un errore:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//Si verifica un errore
alert(bResult);			//Non verrà eseguita questa riga