Get to know MDN better
Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julio de 2015.
El operador delete de JavaScript remueve una propiedad de un objeto; si no se mantienen más referencias a la misma propiedad, eventualmente se libera automáticamente.
Donde expresion debe evaluarse como una referencia a la propiedad, por ejemplo:
El nombre de un objeto, o una expresión que evalúa a un objeto.
propertyLa propiedad a eliminar.
true para todos los casos excepto cuando es una propiedad propia no configurable, en cuyo caso, se retorna false en modo no estricto.
Arroja un TypeError en modo estricto si la propiedad es una propiedad directa no configurable.
Al contrario de lo que se podría pensar (tal vez debido a otros lenguajes de programación como delete in C++), el operador delete no tiene nada que ver con liberar memoria. La gestión de memoria se hace de manera indirecta eliminando referencias. Véase la página gestión de memoria para más detalles.
El operador delete remueve una propiedad dada de un objeto. En caso de que la eliminación sea exitosa, retornará true, en otro caso se retornará false.
Sin embargo, es importante considerar los siguientes escenarios:
Si la propiedad que está intentando eliminar no existe, delete no tendrá ningún efecto y retornará true.
Si una propiedad con el mismo nombre existe en la cadena de prototipos del objeto, entonces, luego de la eliminación, el objeto usará la propiedad de la cadena de prototipos (en otras palabras, delete sólo tiene efecto en los propiedades propias).
Cualquier propiedad declarada con var no puede ser eliminada desde el ámbito global o desde el ámbito de una función.
Las propiedades declaradas con let o const no pueden ser eliminadas dentro del ámbito en el cual fueron definidas.
Las propiedades no configurables no pueden ser removidas. Esto incluye las propiedades de objetos incorporados a JavaScript como Math, Array, Object y propiedades que son creadas como no configurables con métodos como Object.defineProperty().
El siguiente bloque de código muestra un ejemplo simple:
Cuando una propiedad es marcada como no configurable, delete no tendrá ningún efecto, y retornará false. En modo estricto esta situación arrojará un TypeError.
var, let, y const crean propiedades no configurables que no pueden ser eliminadas con el operador delete:
En modo estricto, esto hubiese arrojado una excepción.
En modo estricto, si delete es usado en referencia directa a una variable, un argumento de función o un nombre de función, arrojará un SyntaxError. Por lo tanto, para evitar errores de sintaxis en modo estricto, debe usar el operador delete en la forma de delete object.property o delete object['property'].
Según la especificación moderna de ECMAScript, el orden de recorrido de las propiedades de un objeto está bien definido y es estable a través de las implementaciones. No obstante, en el caso de Internet Explorer, cuando uno usa delete en una propiedad, resulta en un comportamiento confuso, impidiendo que otros navegadores utilicen objetos simples como literales de objeto como si fuesen arreglos asociativos ordenados. En Internet Explorer, mientras que la propiedad value es de hecho establecida como undefined, si uno luego añade una propiedad con el mismo nombre, la propiedad será iterada en su posición anterior y no al final de la secuencia como uno esperaría luego de haber eliminado la propiedad y agregarla nuevamente.
Si usted desea usar un arreglo asociativo ordenado con soporte para implementaciones antiguas, use un objeto Map si está disponible (a través de un polyfill, por ejemplo), o simule esta estructura con dos arreglos separados (uno para las claves y otro para los valores), o construya un arreglo de objetos con una única propiedad, etc.
En el siguiente ejemplo, se elimina una propiedad directa de un objeto mientras que una propiedad con el mismo nombre está disponible en la cadena de prototipos:
Cuando se elimina un elemento de un arreglo, la propiedad length no se ve afectada. Se mantiene incluso si se elimina el último elemento del arreglo.
Cuando el operador delete elimina un elemento de un array, ese elemento no se encuentra más en el mismo. En el siguiente ejemplo, trees[3] es eliminado con el uso de delete.
Si desea que un elemento de un arreglo exista pero que no tenga un valor definido, use el valor undefined en lugar del operador delete. En el siguiente ejmeplo, trees[3] recibe el valor undefined, pero el elemento del arreglo aún existe:
Si en lugar de eso, usted desea eliminar un elemento de un arreglo cambiando los contenidos del mismo, use el método splice(). En el siguiente ejemplo, se elimina completamente trees[3] del arreglo usando splice():
| ECMAScript® 2027 Language Specification # sec-delete-operator |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 30 jun 2025 by MDN contributors.
Your blueprint for a better internet.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.