Jika Anda secara implisit mendeklarasikan variabel tanpa var
, cara yang tepat adalah menggunakan delete foo
.
Namun setelah Anda menghapusnya, jika Anda mencoba menggunakan ini dalam operasi seperti penambahan ReferenceError
akan dibuang karena Anda tidak dapat menambahkan string ke pengidentifikasi yang tidak dideklarasikan, tidak terdefinisi. Contoh:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
Dalam beberapa situasi mungkin lebih aman untuk menetapkannya sebagai false, null, atau undefined sehingga dideklarasikan dan tidak akan membuang jenis kesalahan ini.
foo = false
Perhatikan bahwa di ECMAScript null
, false
, undefined
, 0
, NaN
, atau ''
semua akan mengevaluasi false
. Pastikan Anda tidak menggunakan !==
operator tetapi !=
saat mengetik memeriksa boolean dan Anda tidak ingin memeriksa identitas (begitu null
juga == false
dan false == undefined
).
Perhatikan juga bahwa delete
tidak "menghapus" referensi tetapi hanya properti secara langsung pada objek, misalnya:
bah = {}, foo = {}; bah.ref = foo;
delete bah.ref;
alert( [bah.ref, foo ] )
// ,[object Object] (it deleted the property but not the reference to the other object)
Jika Anda telah mendeklarasikan variabel dengan var
Anda tidak dapat menghapusnya:
(function() {
var x = 5;
alert(delete x)
// false
})();
Dalam Badak:
js> var x
js> delete x
false
Anda juga tidak dapat menghapus beberapa properti yang telah ditentukan seperti Math.PI
:
js> delete Math.PI
false
Ada beberapa pengecualian aneh untuk delete
bahasa apa pun, jika Anda cukup peduli, Anda harus membaca:
var
fungsi di luar) adalah properti dari "objek global", yang ada di browser webwindow
. Jadi -var a = 1; delete window.a; console.log(a);
akan berhasil menghapus variabel dan menyebabkan baris terakhir mengeluarkan kesalahan referensi.