Come cancellare le proprietà di un oggetto in Javascript
Nelle lezioni precedenti abbiamo visto che gli oggetti sono aggregati di proprietà nome/valore dinamici. A runtime è possibile aggiungere nuove proprietà e modificare quelle esistenti. In questa lezione vediamo, invece, come cancellare una proprietà di un oggetto.
Operatore delete
L'operatore delete
ha lo scopo di cancellare una proprietà di un oggetto e richiede come operando un'espressione di accesso. Per comprendere meglio, guardiamo il seguente esempio:
1 2 3 4 5 6 7 8 9 10 11 |
|
In questo caso abbiamo usato la dot notation. Avremmo potuto usare anche la notazione di accesso ad Array:
// Le seguenti righe sono equivalenti
delete persona.città;
delete persona["città"];
Quando si cancella una proprietà, bisogna tener presente che l'operatore delete
elimina soltanto le own properties e non quelle ereditate dal prototipo. Infatti, esaminiamo il seguente stralcio di codice:
1 2 3 4 5 6 7 8 9 10 11 |
|
Nell'esempio, anche se abbiamo inserito la riga delete B.x
essa non avrà effetto perché x
non è una own property di B
.
Valore di ritorno di delete
L'operatore delete
, oltre a cancellare una proprietà di un oggetto, restituisce un valore booleano. Questo valore è true
nei casi seguenti:
- Se cancella con successo una proprietà.
- Se non ha effetto perché è stato richiamato su una property inesistente.
- Se non ha effetto perché è stato richiamato su una property del prototipo.
- Se richiamato su di una espressione che non è di accesso ad una property.
Guardiamo l'esempio:
1 2 3 4 5 6 7 8 9 10 11 |
|
Sorge a questo punto la domanda: Quand'è che delete
restituisce false
?
La risposta è: solo in un caso. In particolare, delete
restituisce false
solo quando richiamato su una proprietà definita con attributo configurable
impostato a false
. Più avanti vedremo come definire gli attributi delle proprietà. Per il momento basta sapere che molte delle proprietà degli oggetti built-in, come ad esempio Object
, hanno l'attributo configurable
impostato a false
.
Altra cosa importante da notare è che se siamo in strict mode
, quando applichiamo delete
ad una proprietà non configurable
non otterremo false
, bensì verrà lanciata un eccezione di tipo TypeError
.
Per comprendere meglio guardiamo l'esempio:
1 2 3 4 5 6 7 |
|
Nell'esempio, proviamo a cancellare la proprietà prototype
dell'oggetto Object
, cioè una proprietà non configurable
. L'operatore delete
è racchiuso in un try
. Se siamo in strict mode
verrà lanciata un'eccezione, per cui verrà eseguito il codice racchiuso nella clausola catch
. Viceversa, se siamo in sloppy mode
verrà eseguita la riga immediatamente successiva al delete
.
Riassumendo
In questa lezione abbiamo visto come cancellare le proprietà di un oggetto attraverso l'operatore delete
. Abbiamo visto che delete
richiede come operando un'espressione di accesso alle proprietà e restituisce un risultato booleano che risulta essere false
solo nel caso in cui la proprietà da cancellare è non configurable
.
Nella prossima lezione vedremo come verificare la presenza o meno di una proprietà in un oggetto.