JavaScript yang disebutkan di sini mengacu pada lingkungan browser termasuk lingkungan host. Yang pertama adalah Objek Global ECMAScript, dan yang kedua adalah objek/fungsi global di bawah lingkungan host (Host).
1. Objek bawaan JavaScript inti, yaitu objek yang disediakan oleh implementasi ECMAScript yang tidak bergantung pada lingkungan host
Objek-objek ini sudah ada (diinisiasi) sebelum program dijalankan. ECMAScript disebut Objek Global dan dibagi menjadi beberapa tipe berikut
1. Sifat Nilai Objek Global. Ada NaN, Infinity, tidak terdefinisi.
2. Properti Fungsi dari Objek Global. Ada eval, parseInt, parseFloat, isNaN, isFinite, decodeURI, encodedURI, encodeURIComponent
3. Properti Konstruktor Objek Global (Properti Konstruktor Objek Global). Ada Objek, Fungsi, Array, String, Boolean, Angka, Tanggal, RegExp, Error, EvalError, RangeError, RefereeError, SyntaxError, TypeError, URIError.
4. Properti lain dari Objek Global dapat dilihat sebagai kelas statis di Java dan dapat digunakan langsung dengan nama kelas + titik + nama metode. Ada Matematika, JSON.
Spesifikasi ECMAScript menyebutkan bahwa objek global ini (The Global Object) memiliki properti Writable, yaitu Writable adalah true, dan enumerable (Enumerable) adalah false, yaitu for dalam enumerasi tidak dapat digunakan. ECMAScript memiliki bagian ini
Kecuali ditentukan lain, properti bawaan standar objek global memiliki atribut {[[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}.
Meskipun spesifikasinya menyebutkan bahwa The Global Object dapat ditulis ulang, tidak ada yang akan menulis ulang. Ini hanyalah ujian.
Copy kode kodenya sebagai berikut:
NaN = 11;
evaluasi = 22;
Objek = 33;
Matematika = 44;
peringatan(NaN);
peringatan(eval);
peringatan(Objek);
peringatan(Matematika);<BR>
Objek global atribut value, objek global atribut fungsi, objek global atribut konstruktor (kelas), dan objek global atribut lainnya adalah NaN, eval, Object, dan Math. Hasilnya adalah sebagai berikut
Hasilnya menunjukkan bahwa kecuali NaN yang tidak dapat ditulis ulang di IE9 (pre3)/Safari, semuanya telah ditulis ulang. Berikut ini hanya empat yang terdaftar. Jika Anda tertarik, Anda dapat menguji semua Objek Global di atas satu per satu. Intinya di sini adalah bahwa objek bawaan inti JavaScript umumnya dapat ditimpa, meskipun tidak ada yang melakukan ini.
Mari kita uji enumerabilitasnya
Copy kode kodenya sebagai berikut:
untuk(var a dalam NaN){
peringatan(a);
}
untuk(var a dalam evaluasi){
peringatan(a);
}
for(var a dalam Objek){
peringatan(a);
}
for(var a dalam Matematika){
peringatan(a);
}
Tidak ada popup di semua browser, artinya properti tidak disebutkan. Jika Anda tertarik, Anda dapat menguji properti enumerasi dari semua The Global Objects di atas satu per satu. Tentu saja, untuk beberapa browser seperti Firefox, beberapa Objek Global dapat dihitung setelah ditulis ulang.
2. Objek/fungsi global yang disediakan oleh lingkungan host
Seperti jendela, peringatan, setTimeout, dokumen, lokasi, dll., sebagian besar browser akan membatasi penulisan ulangnya.
Copy kode kodenya sebagai berikut:
jendela = 55;
peringatan(jendela);
Kalimat ini akan menyebabkan kesalahan pada IE, menyebabkan penyalinan ilegal, dan kotak pop-up berikutnya tidak akan dijalankan. Browser lain masih memunculkan jendela ketika window=55 tidak ada.
Tulis ulang peringatan lagi
Copy kode kodenya sebagai berikut:
waspada = 55;
konsol.log(peringatan);
Kesalahan dilaporkan pada IE. Firefox/Chrome/Safari/Opera telah ditulis ulang. Dapat dilihat bahwa beberapa browser tidak mendukung penulisan ulang objek/fungsi global yang disediakan oleh lingkungan host, sementara yang lain bisa.
Berikut ini adalah dua cara untuk mendeklarasikan variabel global
Copy kode kodenya sebagai berikut:
a1 = 11;
var a2 = 22;
untuk(a di jendela){
jika(a=='a1'||a=='a2'){
peringatan(a)
}
}
Kode di atas tidak akan memunculkan kotak informasi di IE. Di IE, konten internalnya adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
//YAITU
dengan(host_object){//window
dengan(objek_global){//Global
a1 = 11;
var a2 = 22;
}
}
Artinya, a1 dan a2 adalah atribut pada objek Global yang disediakan oleh mesin JS seperti tipe pertama yang disebutkan di atas, bukan atribut pada objek window yang disediakan oleh lingkungan hosting kedua. Oleh karena itu, a1 dan a2 tidak ada ketika for in window di IE. Jika IE memberikan referensi ke objek Global, mungkin kode berikut dapat memunculkan kotak informasi.
Copy kode kodenya sebagai berikut:
untuk(a di Global){
jika(a=='a1'||a=='a2'){
peringatan(a)
}
}
Bagian dalam Firefox/Safari/Chrome/Opera mungkin terlihat seperti berikut
Copy kode kodenya sebagai berikut:
//Firefox/Safari/Chrome/Opera
dengan(host_object){//window
a1 = 11;
var a2 = 22;
dengan(objek_global){//Global
}
}
Artinya, a1 dan a2 adalah tipe kedua yang disebutkan di atas, atribut pada jendela objek global yang disediakan oleh lingkungan host. Oleh karena itu, ketika di jendela, a1 dan a2 ada, dan kotak informasi muncul.
Mari kita lihat metode pihak ketiga untuk mendeklarasikan variabel global window.a3 = 33. Ini menunjukkan bahwa a3 digantung di jendela sebagai properti jendela, sehingga a3 dapat diperoleh di semua browser saat di jendela.