l'operatore delete
è utile in un reset o metodo chiaro per la rimozione dati letterali dell'oggetto legati ai moduli:
delete formmap["forms"]
Esso è anche utile per eliminare oggetti legati allo stato:
/* lights... */
if (node["alpha"+i].active)
{
// camera, action
node["beta"+i] = chi;
}
else
{
/* cut! */
delete node["beta"+i];
node["omega"].state = false;
}
Inoltre, è utile come abbreviazione di inlining proprietà dell'oggetto opzionali:
var foo = {"bar": [], "drink": [], "tab": [] }
// happy hour
this.bar && (foo["bar"]).push(this.bar) || delete foo.bar;
// open a tab
this.drink && (foo["drink"]).push(this.drink) || delete foo.drink;
// cheers
this.tab && (foo["tab"]).push(this.tab) || delete foo.tab;
Infine, è utile come modo per distinguere tra tipi utilizzando le autorizzazioni scrivibili delle proprietà dell'istanza di tipo specifico come prova del tornasole:
// Function
!!foo.prototype === true && delete foo.length === false && delete foo[-1] === true
// Object, Number, Infinity, or Boolean (probably Object)
!!foo.prototype === false && delete foo.length === true && delete foo[-1] === true
// Array
!!foo.prototype === false && delete foo.length === false && delete foo[-1] === true
// String
!!foo.prototype === false && delete foo.length === false && delete foo[-1] === false
// RegExp
delete foo.source === false
Riferimenti
fonte
2013-06-05 23:46:47
io non capisco. Qual è il punto lì? La domanda era preoccupata per la logica dell'applicazione (per quanto ho capito). Quindi la domanda è ancora aperta, qual è il vantaggio dell'uso di 'delete' e non solo di" null "la variabile/proprietà. – jAndy
@jAndy scusate il punto era che annullando non funziona. L'ho reso leggermente più chiaro. – Raynos
uhhh, è arrivato abbastanza tardi nella risposta. La prima versione (solo la '.defineProperty') non aveva molto senso. – jAndy