el operador delete
es útil en un reinicio o un método claro para la eliminación datos literales del objeto atados a las formas:
delete formmap["forms"]
También es útil para eliminar objetos vinculados a estado:
/* lights... */
if (node["alpha"+i].active)
{
// camera, action
node["beta"+i] = chi;
}
else
{
/* cut! */
delete node["beta"+i];
node["omega"].state = false;
}
Además, es útil como una abreviatura para inlining propiedades de objetos opcionales:
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;
Por último, es útil como una forma de distinguir entre tipos utilizando los permisos de escritura de las propiedades de instancia específicas del tipo como una prueba de fuego:
// 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
Referencias
que no lo consiguen. ¿Cuál es el punto allí? La pregunta estaba relacionada con la lógica de la aplicación (hasta donde yo lo entendí). Entonces, la pregunta sigue abierta, cuál es el beneficio de usar 'delete' y no' null'ing de la variable/propiedad. – jAndy
@jAndy lo siento, el punto fue que anularlo no funciona. Lo he dejado un poco más claro. – Raynos
uhhh, que llegó bastante tarde en la respuesta. La primera versión (solo '.defineProperty') no tenía mucho sentido. – jAndy