Espressioni di Assegnamento in JavaScript

Concetti Chiave
  • Le espressioni di assegnamento in JavaScript sono utilizzate per assegnare valori a variabili e proprietà.
  • L'operatore di assegnamento = assegna il valore dell'operando di destra all'operando di sinistra.
  • Gli operatori di assegnamento combinati forniscono scorciatoie per eseguire un'operazione e assegnare il risultato in un'unica espressione.

Espressioni di Assegnamento

JavaScript usa l'operatore = per assegnare un valore a una variabile o proprietà. Ad esempio:

i = 0;     // Imposta la variabile i a 0.
o.x = 1;   // Imposta la proprietà x dell'oggetto o a 1.

L'operatore = si aspetta che il suo operando di sinistra sia un lvalue: una variabile o proprietà di un oggetto (o elemento di array). Si aspetta che il suo operando di destra sia un valore arbitrario di qualsiasi tipo. Il valore di un'espressione di assegnazione è il valore dell'operando di destra. Come effetto collaterale, l'operatore = assegna il valore a destra alla variabile o proprietà a sinistra in modo che futuri riferimenti alla variabile o proprietà valutino quel valore.

Anche se le espressioni di assegnazione sono solitamente abbastanza semplici, a volte potremmo vedere il valore di un'espressione di assegnazione usato come parte di un'espressione più grande. Ad esempio, possiamo assegnare e testare un valore nella stessa espressione con codice come questo:

(a = b) === 0

Se facciamo questo, assicuriamoci di essere chiari sulla differenza tra gli operatori = e ===! Notiamo che = ha precedenza molto bassa, e le parentesi sono solitamente necessarie quando il valore di un'assegnazione deve essere usato in un'espressione più grande.

L'operatore di assegnazione ha associatività da destra a sinistra, il che significa che quando più operatori di assegnazione appaiono in un'espressione, vengono valutati da destra a sinistra. Quindi, possiamo scrivere codice come questo per assegnare un singolo valore a più variabili:

i = j = k = 0;       // Inizializza 3 variabili a 0

Assegnamenti Combinati

Oltre al normale operatore di assegnazione =, JavaScript supporta un numero di altri operatori di assegnazione che forniscono scorciatoie combinando l'assegnazione con qualche altra operazione. Ad esempio, l'operatore += esegue addizione e assegnazione. La seguente espressione:

totale += tassaVendita;

è equivalente a questa:

totale = totale + tassaVendita;

Come ci si potrebbe aspettare, l'operatore += funziona per numeri o stringhe. Per operandi numerici, esegue addizione e assegnazione; per operandi stringa, esegue concatenazione e assegnazione.

Operatori simili includono -=, *=, &=, e così via. La tabella che segue li elenca tutti:

Operatore Esempio Equivalente
+= a += b a = a + b
-= a -= b a = a - b
*= a *= b a = a * b
/= a /= b a = a / b
%= a %= b a = a % b
**= a **= b a = a ** b
<<= a <<= b a = a << b
>>= a >>= b a = a >> b
>>>= a >>>= b a = a >>> b
&= a &= b a = a & b
|= a |= b a = a | b
^= a ^= b a = a ^ b
Tabella 1: Operatori di Assegnamento

Nella maggior parte dei casi, l'espressione:

a op= b

dove op è un operatore, è equivalente all'espressione:

a = a op b

Nella prima riga, l'espressione a è valutata una volta. Nella seconda, è valutata due volte. I due casi differiranno solo se a include effetti collaterali come una chiamata di funzione o un operatore di incremento. Le seguenti due assegnazioni, ad esempio, non sono le stesse:

dati[i++] *= 2;
dati[i++] = dati[i++] * 2;