You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/12-nullish-coalescing-operator/article.md
+28-29Lines changed: 28 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,18 +2,17 @@
2
2
3
3
[recent browser="new"]
4
4
5
-
Qui, in questo articolo, diremo che un'espressione è "definita" quando non è né `null` né `undefined`.
6
-
7
-
Il nullish coalescing operator è scritto come due punti di domanda `??`.
5
+
Il *nullish coalescing operator* è rappresentato da due punti di domanda `??`.
8
6
9
7
Il risultato di `a ?? b` è:
10
8
- se `a` è definito, allora `a`,
11
9
- se `a` non è definito, allora `b`.
12
10
11
+
(In questo articolo, diremo che un'espressione è "definita" quando non è né `null` né `undefined`.)
13
12
14
-
In altre parole, `??` ritorna il primo argomento se questo non è `null/undefined`. Altrimenti, ritorna il secondo.
13
+
In altre parole, tra due operatori `??` ritorna il primo se questo non è `null/undefined`; altrimenti, ritorna il secondo.
15
14
16
-
Il nullish coalescing operator non è qualcosa di completamente nuovo. È solo un modo più elegante (una migliore sintassi) per recuperare il primo valore "definito" dei due.
15
+
Il nullish coalescing operator non è qualcosa di completamente nuovo. È solo un modo più elegante per recuperare il primo valore "definito" tra due operatori.
17
16
18
17
Possiamo riscrivere `result = a ?? b` usando gli operatori che già conosciamo, nel seguente modo:
19
18
@@ -41,18 +40,18 @@ alert(user ?? "Anonymous"); // John
41
40
42
41
Possiamo anche usare una sequenza di `??` per selezionare, da una lista, il primo valore che non sia `null/undefined`.
43
42
44
-
Per esempio, supponiamo di avere dei dati relativi ad un utente nelle variabili `firstName`, `lastName` o `nickName`. Tutte queste potrebbero essere non definite, se l'utente dovesse decidere di non inserirne i valori.
43
+
Per esempio, supponiamo di avere i dati di un utente nelle variabili `firstName`, `lastName` o `nickName`. Tutte queste potrebbero essere non definite, se l'utente dovesse decidere di non inserirne i valori.
45
44
46
-
Vorremmo visualizzare il nome dell'utente usando una di queste variabili, oppure mostrare "Anonymous" se tutte queste sono indefinite.
45
+
Vorremmo visualizzare il nome dell'utente usando una di queste variabili, oppure mostrare "Anonymous" se nessuna di esse è definita.
L'operatore OR `||` esiste sin dagli inizi di JavaScript, quindi gli sviluppatori lo hanno usato a tale scopo per molto tempo.
77
+
L'operatore OR `||` esiste sin dagli inizi di JavaScript e gli sviluppatori lo hanno usato a tale scopo per molto tempo.
79
78
80
-
D'altro canto, il nullish coalescing operator `??` fu aggiunto in JavaScript recentemente, poichè le persone non erano del tutto felici dell'operatore `||`.
79
+
Il nullish coalescing operator `??`, invece, è stato aggiunto recentemente. La ragione è che alcuni sviluppatori non erano del tutto contenti dell'operatore `||`.
81
80
82
81
L'importante differenza tra essi è la seguente:
83
82
- `||` ritorna il primo valore *truthy*.
84
83
- `??` ritorna il primo valore *definito*.
85
84
86
-
In altre parole, `||` non distingue tra `false`, `0`, una stringa vuota `""` e `null/undefined`. Sono tutti, allo stesso modo -- valori "falsy". Se uno tra questi è il primo argomento di `||`, allora otterremo il secondo argomento come risultato.
85
+
In altre parole, `||` non distingue tra `false`, `0`, una stringa vuota `""` e `null/undefined`. In contesto booleano sono tutti valori `false`. Se uno di questi è il primo argomento di `||`, verrà ritornato il secondo argomento.
87
86
88
-
In pratica, però, potremmo voler usare il valore di default solamente quando la variabile è `null/undefined`. È in questo caso che il valore è davvero sconosciuto/non settato.
87
+
In pratica, però, potremmo voler usare il valore di default solamente quando la variabile è `null/undefined`. Ovvero quando è veramente non definita: una stringa vuota `''` o `0`, ad esempio, potrebbero tornarci utili.
89
88
90
-
Per esempio, consideriamo questo:
89
+
Per esempio, consideriamo il seguente codice:
91
90
92
91
```js run
93
92
let height =0;
@@ -96,24 +95,24 @@ alert(height || 100); // 100
96
95
alert(height ??100); // 0
97
96
```
98
97
99
-
- `height ||100` controlla se `height`possiede un valore "falsy", ed effettivamente così è,
100
-
- quindi il risultato è il secondo argomento, `100`.
101
-
- `height ??100` controlla se `height` è `null/undefined`, ma così non è,
102
-
- quindi il risultato è `height` "così com'è", ovvero `0`.
98
+
- `height ||100` controlla se `height`ha un valore falso: così è.
99
+
- il risultato è dunque il secondo argomento, `100`.
100
+
- `height ??100` controlla se `height` è `null/undefined`: non lo è.
101
+
- quindi il risultato è `height`, ovvero `0`.
103
102
104
-
Se un'altezza pari a zero è un valore accettabile, allora questo non dovrebbe essere rimpiazzato con il valore di default, quindi `??`fa la cosa giusta.
103
+
Se un'altezza pari a zero è un valore accettabile, questo non dovrebbe essere rimpiazzato con il valore di default (il secondo operatore, nel'esempio sopra `100`); in questo caso il *nullish coalescing operator* `??`è la scelta giusta.
105
104
106
105
## Precedenza
107
106
108
-
La precedenza dell'operatore `??` è piuttosto bassa: `5` nella [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table). Quindi `??` è valutato prima di `=` e `?`, ma dopo la maggior parte degli altri operatori, come `+`,`*`.
107
+
La precedenza dell'operatore `??` è piuttosto bassa: `5` nella [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table). Quindi `??` è valutato prima di `=` e `?`, ma dopo la maggior parte degli altri operatori, come `+` o`*`.
109
108
110
109
Quindi, se volessimo scegliere un valore tramite l'operatore `??` in un'espressione contenente altri operatori, dovremmo considerare l'utilizzo delle parentesi:
111
110
112
111
```js run
113
112
let height =null;
114
113
let width =null;
115
114
116
-
//important: use parentheses
115
+
//importante: utilizzare le parentesi
117
116
let area = (height ??100) * (width ??50);
118
117
119
118
alert(area); // 5000
@@ -122,24 +121,24 @@ alert(area); // 5000
122
121
Altrimenti, se omettessimo le parentesi, siccome `*` ha una precedenza maggiore rispetto a `??`, sarebbe eseguito prima, portando a risultati scorretti.
123
122
124
123
```js
125
-
//without parentheses
124
+
//senza parentesi
126
125
let area = height ??100* width ??50;
127
126
128
-
// ...works the same as this (probably not what we want):
127
+
// ...funziona allo stesso modo del seguente codice (probabilmente non ciò che vogliamo)
129
128
let area = height ?? (100* width) ??50;
130
129
```
131
130
132
131
### Usare ?? con && o ||
133
132
134
133
Per motivi di sicurezza, JavaScript proibisce l'utilizzo di `??` insieme agli operatori `&&` e `||`, a meno che la precedenza non sia esplicitamente specificata tramite l'utilizzo delle parentesi.
135
134
136
-
Il codice sottostante causa un errore di sintassi:
135
+
Il codice sotto causa un errore di sintassi:
137
136
138
137
```js run
139
138
let x =1&&2??3; // Syntax error
140
139
```
141
140
142
-
La limitazione è sicuramente discutibile, ma fu aggiunta alle specifiche del linguaggio con lo scopo di evitare errori di programmazione nel momento in cui le persone hanno iniziato ad utilizzare `??` al posto di `||`.
141
+
La limitazione è sicuramente discutibile, ma fu aggiunta alle specifiche del linguaggio -quando le persone hanno iniziato ad utilizzare `??` al posto di `||`- con lo scopo di evitare errori di programmazione.
143
142
144
143
Per aggirare il problema si possono utilizzare delle parentesi esplicite:
145
144
@@ -151,16 +150,16 @@ let x = (1 && 2) ?? 3; // Works
151
150
alert(x); // 2
152
151
```
153
152
154
-
## Sommario
153
+
## Riepilogo
155
154
156
155
- Il nullish coalescing operator `??` fornisce una scorciatoia per la scelta del primo valore "definito" da una lista di valori.
157
156
158
157
È usato per assegnare valori di default alle variabili:
159
158
160
159
```js
161
-
//set height=100, if height is null or undefined
160
+
// imposta height = 100 se 'height' è *null* o *undefined*
162
161
height = height ??100;
163
162
```
164
163
165
-
- L'operatore `??` ha una precedenza molto bassa, solo un po' più alta di `?` e `=`, quindi considerare l'aggiunta di parentesi quando lo si utilizza all'interno di un'espressione.
164
+
- L'operatore `??` ha una precedenza molto bassa, solo un po' più alta di `?` e `=`, quindi va considerata l'aggiunta di parentesi quando lo si utilizza all'interno di un'espressione.
166
165
- È proibito usarlo con `||` o `&&` senza l'utilizzo di parentesi esplicite.
0 commit comments