Alternatif untuk kebanyakan typeofjawaban;
Variabel global dideklarasikan dengan var varname = value;pernyataan dalam lingkup global
dapat diakses sebagai properti dari objek jendela.
Karena itu, hasOwnProperty()metode, yang
mengembalikan boolean yang menunjukkan apakah objek memiliki properti yang ditentukan sebagai properti sendiri (sebagai lawan pewarisannya)
dapat digunakan untuk menentukan apakah
a vardari "varname" telah dinyatakan secara global yaitu merupakan properti dari window.
// Globally established, therefore, properties of window
var foo = "whatever", // string
bar = false, // bool
baz; // undefined
// window.qux does not exist
console.log( [
window.hasOwnProperty( "foo" ), // true
window.hasOwnProperty( "bar" ), // true
window.hasOwnProperty( "baz" ), // true
window.hasOwnProperty( "qux" ) // false
] );
Apa yang hebat tentang hasOwnProperty() ini adalah bahwa dalam memanggilnya, kita tidak menggunakan variabel yang mungkin belum dideklarasikan - yang tentu saja merupakan setengah dari masalah.
Meskipun tidak selalu yang sempurna atau yang ideal , dalam keadaan tertentu, itu hanya pekerjaan!
Catatan
Di atas benar ketika menggunakan varuntuk mendefinisikan variabel , yang bertentangan dengan letyang:
mendeklarasikan variabel lokal ruang lingkup blok, secara opsional menginisialisasi nilai.
tidak seperti var kata kunci, yang mendefinisikan variabel secara global, atau secara lokal untuk seluruh fungsi terlepas dari ruang lingkup blok.
Di tingkat atas program dan fungsi let, tidak seperti var, tidak membuat properti pada objek global.
Untuk kelengkapan: const konstanta, menurut definisi, sebenarnya bukan variabel (walaupun isinya bisa); lebih relevan:
Konstanta global tidak menjadi properti objek jendela, tidak seperti varvariabel. Penginisialisasi untuk konstanta diperlukan; yaitu, Anda harus menentukan nilainya dalam pernyataan yang sama dengan yang dinyatakannya.
Nilai konstanta tidak dapat berubah melalui penugasan kembali, dan itu tidak dapat dideklarasikan ulang.
Deklarasi const menciptakan referensi read-only ke suatu nilai. Itu tidak berarti nilai yang dipegangnya tidak berubah, hanya saja pengenal variabel tidak dapat dipindahkan.
Karena letvariabel atau constkonstanta tidak pernah merupakan properti dari objek apa pun yang mewarisi hasOwnProperty()metode ini, maka variabel tersebut tidak dapat digunakan untuk memeriksa keberadaannya.
Mengenai ketersediaan dan penggunaan hasOwnProperty():
Setiap objek yang diturunkan dari Object mewarisi hasOwnProperty()metode ini. [...] tidak seperti inoperator, metode ini tidak memeriksa rantai prototipe objek.
foodideklarasikan,typeof foo === 'undefined'atautypeof foo === typeof undefined