Alternatif untuk kebanyakan typeof
jawaban;
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 var
dari "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 var
untuk mendefinisikan variabel , yang bertentangan dengan let
yang:
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 var
variabel. 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 let
variabel atau const
konstanta 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 in
operator, metode ini tidak memeriksa rantai prototipe objek.
foo
dideklarasikan,typeof foo === 'undefined'
atautypeof foo === typeof undefined