JavaScriptIntermedio28 oct 2025
¿Borrar una variable? ¡Ni lo intentes! 💥
snippet.javascript
var myVar = 42;
let myLet = 100;
const myConst = 200;
globalMyVar = 300;
console.log('Before delete:');
console.log('myVar:', typeof myVar, myVar);
console.log('myLet:', typeof myLet, myLet);
console.log('myConst:', typeof myConst, myConst);
console.log('globalMyVar:', typeof globalMyVar, globalMyVar);
console.log('\nResult of delete operations:');
console.log('delete myVar:', delete myVar);
console.log('delete myLet:', delete myLet);
console.log('delete myConst:', delete myConst);
console.log('delete globalMyVar:', delete globalMyVar);
console.log('\nAfter delete:');
console.log('myVar:', typeof myVar, myVar);
console.log('myLet:', typeof myLet, myLet);
console.log('myConst:', typeof myConst, myConst);
try {
console.log('globalMyVar:', typeof globalMyVar, globalMyVar);
} catch (e) {
console.log('globalMyVar: ReferenceError -', e.message);
}¿Qué crees que imprime?
✅ Salida Esperada
Before delete:
myVar: number 42
myLet: number 100
myConst: number 200
globalMyVar: number 300
Result of delete operations:
delete myVar: true
delete myLet: true
delete myConst: true
delete globalMyVar: true
After delete:
myVar: undefined undefined
myLet: undefined undefined
myConst: undefined undefined
globalMyVar: undefined undefined⚠️ Salida Real
Before delete:
myVar: number 42
myLet: number 100
myConst: number 200
globalMyVar: number 300
Result of delete operations:
delete myVar: false
delete myLet: false
delete myConst: false
delete globalMyVar: true
After delete:
myVar: number 42
myLet: number 100
myConst: number 200
globalMyVar: ReferenceError - globalMyVar is not defined¿Por qué pasa esto?
¡Amigos programadores, prepárense para una sorpresa que les dejará la cabeza dando vueltas! 🤯 El operador `delete` en JavaScript es como ese amigo que te dice que va a "limpiar", pero solo quita el polvo superficial.
Su misión principal es **eliminar propiedades de objetos**, no variables. Aquí la clave:
- Una variable declarada con `var` (fuera de una función) crea una propiedad **no configurable** en el objeto global. Por eso, `delete myVar` devuelve `false` y `myVar` sigue ahí, imperturbable. ¡Es como intentar desalojar a un inquilino con contrato indefinido! 🏠
- Las variables `let` y `const` son aún más robustas. Crean un **binding léxico** que no es una propiedad de ningún objeto, ¡simplemente existen en su ámbito! `delete` ni las toca, por eso también devuelve `false`. Es como intentar borrar un concepto abstracto del universo. ✨
- La excepción es `globalMyVar` (declarada sin `var`/`let`/`const`). Estas se convierten en propiedades **configurables** del objeto global. ¡Ah, estas sí son desalojables! `delete globalMyVar` devuelve `true` y la variable... ¡desaparece! 👋
En resumen: `delete` solo puede eliminar propiedades configurables. Con variables, es más inútil que un paraguas en el desierto. 🏜️
Conceptos relacionados
operatorsscopeglobal-object