Hari ini ketika saya melihat kode prototipe, saya menemukan operator hapus.
tidak disetel: fungsi(kunci) {
var nilai = ini._objek[kunci];
hapus this._object[key];
nilai kembalian;
}
Saya memeriksa manualnya,
Operator delete menghapus properti dari objek atau elemen dari array.
hapus ekspresi
Parameter ekspresi adalah ekspresi JScript yang valid, biasanya berupa nama properti atau elemen array.
Deskripsi Jika hasil ekspresi adalah objek dan atribut yang ditentukan dalam ekspresi ada, dan objek tidak mengizinkannya untuk dihapus, false dikembalikan.
Dalam semua kasus lainnya, mengembalikan nilai true.
Senang rasanya melihat "menghapus elemen dari array", tetapi setelah mencobanya di ff, sepertinya itu hanya dapat menghapus nilai elemen itu, bukan elemen itu sendiri. Namun, dimungkinkan untuk menghapus properti dari suatu objek.
Saya googling lagi dan menemukan artikel yang sangat detail, jadi saya posting ulang di sini agar tidak lupa:
Judul: Variabel Javascript dan Operator Hapus Pernyataan Hak Cipta: Anda dapat mencetak ulang sesuka hati, tetapi Anda harus menunjukkan penulis asli charlee dan tautan asli http://tech.idv2.com/2008/01/09/javascript-variables-and- hapus saat mencetak ulang -operator/ dan pernyataan ini.
isi:
Saya baru saja membaca artikel bagus (tautan asli), yang memberikan analisis menyeluruh tentang operator penghapusan dalam Javascript. Berikut adalah pengenalan singkat tentang konten tersebut.
Meskipun merupakan operator penghapusan kecil, perilakunya sangat kompleks.
Variabel Javascript
Objek dihapus oleh operator hapus Saat penghapusan dilakukan pada suatu variabel, atribut yang dapat dihapus dan atribut yang tidak dapat dihapus, variabel yang dapat dihapus, dan variabel yang tidak dapat dihapus
Mengembalikan nilai penghapusan
------------------------------- --- ----------------------------------
Variabel Javascript Faktanya, dalam Javascript, variabel = properti objek, ini karena Javascript akan membuat objek Global sebelum menjalankan skrip. Semua variabel global adalah properti dari objek Global ini. Saat menjalankan fungsi, objek Aktivasi juga akan dibuat. Misalnya:
var global = 42;this.global; // 42, Anda dapat mengakses objek Global melalui this.global2 = 12;global2; // 12function foo() { var local = 36; dapat diakses secara langsung, // Oleh karena itu, variabel lokal tidak dapat diakses melalui foo.local} Objek dihapus oleh operator hapus
Ada juga operator delete di C++, yang menghapus objek yang ditunjuk oleh pointer. Misalnya:
// C++class Object {public: Object *x;}Object o;ox = new Object();delete ox; // Objek Object baru pada baris sebelumnya akan dilepaskan, tetapi penghapusan Javascript berbeda dari C++. Objek yang ditunjuk oleh ox tidak dihapus, tetapi atribut ox itu sendiri dihapus.
// Javascriptvar o = {};ox = new Object();delete ox; // Objek Object new di baris sebelumnya masih ada ox; Setelah menghapus ox, objek Object akan menjadi sampah yang dikumpulkan karena telah kehilangan referensinya. Oleh karena itu, menghapus ox adalah "setara dengan" menghapus objek yang ditunjuk oleh ox. bahkan jika implementasinya sepenuhnya Tidak menghapus objek Objek tidak melanggar standar ECMAScript.
"Menghapus atribut alih-alih menghapus objek" dapat dikonfirmasi dengan kode berikut.
var o = {};var a = { x: 10 };oa = a;delete oa; // Atribut oa dihapus oa; // undefinisia.x; masih berupa Referensi, sehingga tidak akan didaur ulang. Selain itu, delete ox juga dapat ditulis sebagai delete o["x"] yang keduanya mempunyai efek yang sama.
Saat menghapus suatu variabel, variabel tersebut juga merupakan properti dari objek Global atau Aktivasi, sehingga operasi penghapusan pada variabel tersebut memiliki hasil yang sama.
var global = 42; delete global; // Hapus Global.globalfunction foo() { var local = 36; delete local; // Hapus Activation.local} Properti yang dapat dihapus dan properti yang tidak dapat dihapus Tidak semua properti dapat dihapus menghapus. Misalnya, properti yang dideklarasikan dalam prototipe tidak dapat dihapus:
function C() { this.x = 42; .xdelete ox;ox; // 12, ox yang didefinisikan dalam prototipe tidak akan dihapus bahkan jika delete ox dijalankan lagi. Atribut jenis ini dapat dianggap memiliki ciri-ciri DontDelete.
var re = /abc/i;delete re.ignoreCase;re.ignoreCase; // benar, abaikanCase tidak dapat menghapus variabel yang dapat dihapus dan variabel yang tidak dapat dihapus. Variabel yang dideklarasikan melalui var dan fungsi yang dideklarasikan melalui fungsi memiliki atribut DontDelete dan tidak dapat dihapus.
var x = 36;hapus x;x; // 36, x tidak dihapus y = 12;hapus y;y; // fungsi tidak terdefinisi foo() { return }delete foo;foo(); adalah Satu pengecualian adalah bahwa dalam kode yang dieksekusi melalui eval, meskipun variabel yang dideklarasikan melalui var termasuk dalam objek Global yang sama dengan variabel normal yang dideklarasikan var, variabel tersebut tidak memiliki atribut DontDelete dan dapat dihapus.
eval("var x = 36;");x; // 42delete x;x; // undefinisi Tetapi ada pengecualian. Variabel yang didefinisikan oleh var dalam fungsi dalam kode eval memiliki DontDelete dan tidak dapat dihapus eval(" ( function() { var x = 42; delete x; return x; })();"); // Mengembalikan nilai kembalian 42delete
Hapus adalah operator normal dan mengembalikan nilai benar atau salah. Aturannya adalah: ketika properti dari objek yang dihapus ada dan memiliki DontDelete, ia mengembalikan false, jika tidak, ia mengembalikan true. Salah satu fitur di sini adalah true dikembalikan meskipun atribut objek tidak ada, sehingga nilai yang dikembalikan tidak sepenuhnya setara dengan apakah penghapusan berhasil atau tidak.
fungsi C() { this.x = 42; }C.prototype.y = 12;var o = new C();hapus ox; // trueo.x; / ox ada dan tidak ada DontDelete, return truedelete oy; // 12// o sendiri tidak memiliki atribut oy, jadi return true// Dari sini Anda juga dapat melihat keberadaan rantai prototipe, the atribut objek sendiri dan atribut prototipe berbeda delete o; // false// Global.o memiliki atribut DontDelete sehingga mengembalikan falsedelete undefinisiProperty // true// Global tidak memiliki properti bernama undefinisiProperty sehingga mengembalikan truedelete 42; / 42 bukan properti sehingga mengembalikan nilai true . Beberapa implementasi akan memunculkan pengecualian (melanggar standar ECMAScript) var x = 24; delete x++; // 25// Yang dihapus adalah nilai kembalian (24) dari x++, bukan atribut, jadi true dikembalikan;