1. Variabel
Ketika datang ke operator hapus di JavaScript, pertama -tama kita harus mencari tahu hubungan antara variabel dan atribut dalam JavaScript.
Dalam JavaScript, hubungan antara variabel dan atribut objek sangat halus, dan bahkan dapat disamakan berkali -kali, karena JavaScript akan membuat objek global sebelum menjalankan skrip, yang merupakan objek jendela di browser. Semua variabel global adalah atribut dari objek global ini. Saat menjalankan fungsi, objek aktivasi juga akan dibuat. Semua variabel lokal adalah atribut dari objek aktivasi ini. Anda dapat mempelajari tentang ruang lingkup dan penutupan javascript ini.
Salinan kode adalah sebagai berikut:
// Atribut yang dinyatakan dalam prototipe tidak dapat dihapus
var global = 1;
this.global; // 1, Anda dapat mengakses objek global melalui ini
this.global2 = 2;
Global2; // 12
fungsi foo () {
var lokal = 36;
// Namun, aktivasi tidak dapat diakses secara langsung.
// Oleh karena itu, variabel lokal tidak dapat diakses melalui foo.local
}
Tampaknya variabel setara dengan sifat objek, tetapi pada kenyataannya, mereka tidak sama, setidaknya untuk operator hapus. Pemahaman saya adalah bahwa deklarasi variabel harus diselesaikan melalui pernyataan VAR. Variabel global yang tidak dideklarasikan melalui pernyataan VAR adalah semua sifat objek jendela. Ini membuatnya mudah untuk memahami hubungan antara variabel dan sifat objek.
2. Hapus operator
Operator Hapus digunakan untuk menghapus sifat objek. Untuk nilai jenis referensi, ia juga menghapus properti objek itu sendiri, dan tidak menghapus objek yang ditunjukkan oleh properti. Jika Anda memiliki pertanyaan, Anda dapat melihat nilai -nilai jenis dasar dan jenis referensi, atau menguji kode berikut:
Salinan kode adalah sebagai berikut:
var o = {};
var a = {x: 10};
oa = a;
Hapus OA; // Atribut OA dihapus
Console.log (OA); // belum diartikan
Console.log (AX); // 10, karena objek {x: 10} masih dirujuk oleh A, jadi tidak akan didaur ulang
Selain itu, Delete Ox juga dapat ditulis sebagai Hapus O ["X"], dan efek keduanya sama.
3. Variabel tidak dapat dihapus
Variabel yang dinyatakan oleh VAR dan fungsi yang dinyatakan oleh fungsi memiliki fitur DontDelete dan tidak dapat dihapus. Variabel global tidak dideklarasikan melalui var (properti objek global)
Salinan kode adalah sebagai berikut:
var global = {
A: 123,
B: {
C: 1345
}
};
Hapus Global; //Tidak sah
Console.log (Global)
obj = {
A: 123
};
hapus obj; // Hapus OBJ Variabel Global, Obj Atribut Objek Jendela
console.log (obj); // obj tidak didefinisikan
4. Atribut yang dinyatakan dalam prototipe dan atribut yang datang dengan objek tidak dapat dihapus.
Atribut yang dinyatakan dalam prototipe prototipe dan atribut yang datang dengan objek (pada kenyataannya, atribut ini juga dalam prototipe prototipe) dapat dianggap memiliki karakteristik DontDelete dan tidak dapat dihapus. Misalnya
Salinan kode adalah sebagai berikut:
// Atribut yang dinyatakan dalam prototipe tidak dapat dihapus
fungsi obj () {
this.x = 1;
}
obj.prototype.x = 2;
var o = Obj baru ();
Console.log (OX); // 1, sapi yang didefinisikan dalam konstruktor
hapus sapi;
Console.log (OX); // 2, sapi yang didefinisikan dalam prototipe, bahkan jika hapus sapi dieksekusi lagi, itu tidak akan dihapus.
// Atribut yang datang dengan objek tidak dapat dihapus
var strings = "123456";
console.log (string.length); // 6
hapus string.length;
console.log (string.length); // masih 6
5. Beberapa pengecualian di bawah pernyataan eval
Dalam kode yang dijalankan oleh Eval, meskipun variabel yang dinyatakan oleh VAR milik objek global sebagai variabel yang dinyatakan secara normal, mereka tidak memiliki atribut DontDelete dan dapat dihapus. Namun, variabel yang ditentukan oleh var dalam fungsi dalam kode eval memiliki dontdelete dan tidak dapat dihapus.
Salinan kode adalah sebagai berikut: eval ("var x = 42;");
X; // => 42
hapus x;
X; // => ReferenceError: x tidak didefinisikan
eval ("fungsi f () {return 12;}");
F(); // => 12
hapus f;
F(); // => ReferenceError: f tidak didefinisikan
// Dalam kode yang dijalankan oleh Eval, meskipun variabel yang dideklarasikan oleh VAR milik objek global sebagai variabel var normal yang dinyatakan,
// Tapi mereka tidak memiliki fitur DontDelete dan dapat dihapus.
eval ("(function () {" +
"Var x = 42;" +
"Hapus x;" +
"Kembalikan x;" +
"}) ();")
// => 42
// Variabel yang ditentukan oleh var dalam fungsi dalam kode eval memiliki dontdelete dan tidak dapat dihapus.
6. Nilai Pengembalian Hapus
Hapus adalah operator normal dan akan mengembalikan benar atau salah. Kembalikan false ketika properti dari objek yang dihapus ada dan memiliki dondelete, jika tidak benar. Salah satu fitur di sini adalah bahwa ketika atribut objek tidak ada, itu mengembalikan true, sehingga nilai pengembalian tidak persis setara dengan apakah penghapusan berhasil atau tidak.
Salinan kode adalah sebagai berikut:
fungsi c () {
this.x = 42;
}
c.prototype.y = 12;
var o = c baru ();
hapus sapi; // BENAR
sapi; // belum diartikan
"X" di O; // PALSU
// ox ada dan tidak memiliki dontdelete, returns true
hapus oy; // BENAR
oy; // 12
// o itu sendiri tidak memiliki atribut OY, jadi itu kembali benar
// Dari sini Anda juga dapat melihat keberadaan rantai prototipe. Atribut dan atribut prototipe objek sendiri berbeda.
hapus o; // PALSU
// global.o memiliki fitur dontdelete jadi mengembalikan false
Hapus Properproperty yang tidak ditentukan; // BENAR
// Global tidak memiliki properti bernama UndefinedProperty So Returns True
Hapus 42; // BENAR
// 42 bukan properti jadi mengembalikan true. Beberapa implementasi akan melempar pengecualian (melanggar standar ecmascript)
var x = 24;
hapus x ++; // BENAR
X; // 25
// Yang dihapus adalah nilai pengembalian x ++ (24), bukan properti, jadi itu mengembalikan true