Objek global menyediakan variabel dan fungsi yang tersedia di mana saja. Secara default, yang dibangun ke dalam bahasa atau lingkungan.
Di browser diberi nama window
, untuk Node.js bersifat global
, untuk lingkungan lain mungkin memiliki nama lain.
Baru-baru ini, globalThis
ditambahkan ke bahasa tersebut, sebagai nama standar untuk objek global, yang harus didukung di semua lingkungan. Ini didukung di semua browser utama.
Kita akan menggunakan window
di sini, dengan asumsi bahwa lingkungan kita adalah browser. Jika skrip Anda dapat berjalan di lingkungan lain, lebih baik gunakan globalThis
saja.
Semua properti objek global dapat diakses secara langsung:
peringatan("Halo"); // sama dengan window.alert("Halo");
Di browser, fungsi dan variabel global yang dideklarasikan dengan var
(bukan let/const
!) menjadi milik objek global:
var gVar = 5; alert(window.gVar); // 5 (menjadi properti objek global)
Deklarasi fungsi memiliki efek yang sama (pernyataan dengan kata kunci function
dalam alur kode utama, bukan ekspresi fungsi).
Tolong jangan mengandalkan itu! Perilaku ini ada karena alasan kompatibilitas. Skrip modern menggunakan modul JavaScript di mana hal seperti itu tidak terjadi.
Jika kita menggunakan let
, hal seperti ini tidak akan terjadi:
misalkan gLet = 5; alert(window.gLet); // tidak terdefinisi (tidak menjadi properti objek global)
Jika suatu nilai sangat penting sehingga Anda ingin membuatnya tersedia secara global, tuliskan langsung sebagai properti:
// menjadikan informasi pengguna saat ini bersifat global, agar semua skrip dapat mengaksesnya jendela.Pengguna Saat Ini = { nama: "Yohanes" }; // di tempat lain dalam kode alert(namaPengguna saat ini); // Yohanes // atau, jika kita mempunyai variabel lokal dengan nama "pengguna saat ini" // mendapatkannya dari jendela secara eksplisit (aman!) alert(window.currentUser.nama); // Yohanes
Meskipun demikian, penggunaan variabel global umumnya tidak disarankan. Variabel global harus sesedikit mungkin. Desain kode di mana suatu fungsi mendapatkan variabel “masukan” dan menghasilkan “hasil” tertentu lebih jelas, tidak rentan terhadap kesalahan, dan lebih mudah diuji dibandingkan jika menggunakan variabel luar atau global.
Kami menggunakan objek global untuk menguji dukungan fitur bahasa modern.
Misalnya, uji apakah objek Promise
bawaan ada (tidak ada di browser lama):
if (!window.Janji) { alert("Browser Anda sudah sangat tua!"); }
Jika tidak ada (misalnya, kita menggunakan browser lama), kita dapat membuat “polyfills”: menambahkan fungsi yang tidak didukung oleh lingkungan, tetapi ada dalam standar modern.
if (!window.Janji) { window.Promise = ... // implementasi khusus dari fitur bahasa modern }
Objek global menyimpan variabel yang harus tersedia di mana saja.
Itu termasuk bawaan JavaScript, seperti Array
dan nilai spesifik lingkungan, seperti window.innerHeight
– tinggi jendela di browser.
Objek global memiliki nama universal globalThis
.
…Tetapi lebih sering disebut dengan nama khusus lingkungan “jadul”, seperti window
(browser) dan global
(Node.js).
Kita harus menyimpan nilai dalam objek global hanya jika nilai tersebut benar-benar global untuk proyek kita. Dan minimalkan jumlah mereka.
Di dalam browser, kecuali kita menggunakan modul, fungsi dan variabel global yang dideklarasikan dengan var
menjadi properti objek global.
Agar kode kita tahan masa depan dan lebih mudah dipahami, kita harus mengakses properti objek global secara langsung, seperti window.x
.