1. Variables
Cuando se trata del operador Eliminar en JavaScript, primero debemos descubrir la relación entre variables y atributos en JavaScript.
En JavaScript, la relación entre variables y atributos del objeto es muy sutil, e incluso puede equipararse muchas veces, porque JavaScript creará un objeto global antes de ejecutar el script, que es un objeto de ventana en el navegador. Todas las variables globales son atributos de este objeto global. Al ejecutar la función, también se creará un objeto de activación. Todas las variables locales son atributos de este objeto de activación. Puede aprender sobre este alcance y cierres de JavaScript.
La copia del código es la siguiente:
// Los atributos declarados en el prototipo no se pueden eliminar
var global = 1;
this.global; // 1, puede acceder a objetos globales a través de este
this.global2 = 2;
global2; // 12
función foo () {
var local = 36;
// Sin embargo, no se puede acceder directamente a la activación.
// Por lo tanto, no se puede acceder a la variable local a través de foo.local
}
Parece que las variables son equivalentes a las propiedades de los objetos, pero de hecho, no son las mismas, al menos para el operador de eliminación. Entiendo que las declaraciones variables deben completarse a través de declaraciones VAR. Las variables globales que no se declaran a través de declaraciones VAR son todas las propiedades de los objetos de la ventana. Esto facilita la comprensión de la relación entre variables y propiedades del objeto.
2. Eliminar operador
El operador Eliminar se utiliza para eliminar las propiedades de los objetos. Para los valores de tipo de referencia, también elimina las propiedades del objeto en sí mismas y no elimina el objeto apuntado por la propiedad. Si tiene alguna pregunta, puede observar los valores del tipo básico y el tipo de referencia, o probar el siguiente código:
La copia del código es la siguiente:
var o = {};
var a = {x: 10};
OA = a;
eliminar oa; // El atributo OA se elimina
console.log (OA); // indefinido
console.log (ax); // 10, porque el objeto {x: 10} todavía está referenciado por A, por lo que no se reciclará
Además, Delete OX también se puede escribir como Eliminar O ["X"], y los efectos de ambos son los mismos.
3. Las variables no se pueden eliminar
Las variables declaradas por VAR y las funciones declaradas por la función tienen la función DontDelete y no se pueden eliminar. Variables globales no declaradas a través de VAR (propiedades de objetos globales)
La copia del código es la siguiente:
var global = {
A: 123,
b: {
C: 1345
}
};
Eliminar global; //Inválido
console.log (global)
obj = {
A: 123
};
eliminar obj; // Eliminar variables globales obj, atributo obj del objeto de ventana
console.log (obj); // obj no está definido
4. Los atributos declarados en el prototipo y los atributos que vienen con el objeto no se pueden eliminar.
Los atributos declarados en el prototipo prototipo y los atributos que vienen con el objeto (de hecho, estos atributos también están en el prototipo prototipo) pueden considerarse que tienen las características de DontDelete y no se pueden eliminar. Por ejemplo
La copia del código es la siguiente:
// Los atributos declarados en el prototipo no se pueden eliminar
función obj () {
this.x = 1;
}
obj.prototype.x = 2;
var o = nuevo obj ();
console.log (ox); // 1, buey definido en el constructor
eliminar buey;
console.log (ox); // 2, buey definido en prototipo, incluso si se ejecuta el buey de eliminación nuevamente, no se eliminará.
// Los atributos que vienen con el objeto no se pueden eliminar
VAR Strings = "123456";
console.log (strings.length); // 6
Eliminar cadenas.length;
console.log (strings.length); // todavía es 6
5. Varias excepciones bajo la declaración EVAL
En el código ejecutado por Eval, aunque las variables declaradas por VAR pertenecen a los objetos globales como variables de VAR normales declaradas, no tienen el atributo DonTDelete y se pueden eliminar. Sin embargo, las variables definidas por VAR en la función en el código EVALO tienen DonDelete y no se pueden eliminar.
La copia del código es la siguiente: eval ("var x = 42;");
incógnita; // => 42
eliminar x;
incógnita; // => referenceError: x no está definido
eval ("function f () {return 12;}");
F(); // => 12
eliminar f;
F(); // => referenceError: F no está definido
// En el código ejecutado por Eval, aunque la variable declarada por VAR pertenece al objeto global como variables declaradas VAR normales,
// Pero no tienen la función DonTdelete y se pueden eliminar.
eval ("(function () {" +
"var x = 42;" + +
"Eliminar x;" + +
"Regresar x;" + +
"}) ();")
// => 42
// La variable definida por VAR en la función en el código EVALO no tiene Delete y no se puede eliminar.
6. El valor de retorno de Delete
Delete es un operador normal y devolverá verdadero o falso. Devuelve falso cuando existe la propiedad del objeto eliminado y tiene dondelete, de lo contrario cierto. Una característica aquí es que cuando el atributo del objeto no existe, devuelve verdadero, por lo que el valor de retorno no es exactamente equivalente a si la eliminación es exitosa o no.
La copia del código es la siguiente:
función c () {
this.x = 42;
}
c.prototype.y = 12;
var o = nuevo C ();
eliminar buey; // verdadero
buey; // indefinido
"X" en o; // FALSO
// buey existe y no tiene no delete, devuelve verdadero
eliminar oy; // verdadero
oy; // 12
// o en sí no tiene un atributo OY, por lo que devuelve verdadero
// Desde aquí también puedes ver la existencia de la cadena prototipo. Los atributos y los atributos prototipo del objeto son diferentes.
eliminar o; // FALSO
// Global.o tiene la función DonTDelete, por lo que devuelve falso
Eliminar la propiedad indefinida; // verdadero
// Global no tiene una propiedad llamada UndefinedProperty, por lo que devuelve verdadero
eliminar 42; // verdadero
// 42 no es una propiedad, por lo que devuelve verdadero. Algunas implementaciones arrojarán excepciones (violar el estándar de ECMAScript)
var x = 24;
eliminar x ++; // verdadero
incógnita; // 25
// Lo que se elimina es el valor de retorno de x ++ (24), no una propiedad, por lo que devuelve verdadero