JavaScript ที่กล่าวถึงในที่นี้หมายถึงสภาพแวดล้อมของเบราว์เซอร์รวมถึงสภาพแวดล้อมของโฮสต์ อันแรกคือ ECMAScript Global Object และอันที่สองคืออ็อบเจ็กต์/ฟังก์ชันโกลบอลภายใต้สภาพแวดล้อมโฮสต์ (โฮสต์)
1. ออบเจ็กต์ในตัว Core JavaScript นั่นคือออบเจ็กต์ที่จัดทำโดยการใช้ ECMAScript ที่ไม่ขึ้นอยู่กับสภาพแวดล้อมของโฮสต์
อ็อบเจ็กต์เหล่านี้มีอยู่แล้ว (อินสแตนซ์) ก่อนที่โปรแกรมจะถูกดำเนินการ ECMAScript เรียกว่า The Global Object และแบ่งออกเป็นประเภทต่างๆ ดังต่อไปนี้
1. คุณสมบัติค่าของอ็อบเจ็กต์โกลบอล มี NaN, Infinity, ไม่ได้กำหนดไว้
2. คุณสมบัติฟังก์ชันของวัตถุโกลบอล มี eval, parseInt, parseFloat, isNaN, isFinite, decodeURI, encodedURI, encodeURIComponent
3. คุณสมบัติตัวสร้างของ Global Object (คุณสมบัติตัวสร้างของ Global Object) มี Object, Function, Array, String, Boolean, Number, Date, RegExp, Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
4. คุณสมบัติอื่นๆ ของ Global Object สามารถดูได้เป็นคลาสคงที่ใน Java และสามารถใช้ได้โดยตรงกับชื่อคลาส + ระยะเวลา + ชื่อเมธอด มีคณิตศาสตร์ JSON
ข้อกำหนด ECMAScript ระบุว่าอ็อบเจ็กต์โกลบอลเหล่านี้ (The Global Object) มีคุณสมบัติที่สามารถเขียนได้ นั่นคือ Writable เป็นจริง และแจกแจง (Enumerable) เป็นเท็จ กล่าวคือ เนื่องจากไม่สามารถใช้ในการแจงนับได้ ECMAScript มีส่วนนี้
คุณสมบัติบิวท์อินมาตรฐานของอ็อบเจ็กต์โกลบอลมีแอตทริบิวต์ {[[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true} เว้นแต่จะระบุไว้เป็นอย่างอื่น
แม้ว่าข้อกำหนดจะระบุว่า The Global Object สามารถเขียนใหม่ได้ แต่จะไม่มีใครเขียนใหม่ได้ นี่เป็นเพียงการทดสอบ
คัดลอกรหัสรหัสดังต่อไปนี้:
น่าน = 11;
คะแนน = 22;
วัตถุ = 33;
คณิตศาสตร์ = 44;
การแจ้งเตือน (น่าน);
การแจ้งเตือน (ประเมิน);
การแจ้งเตือน (วัตถุ);
การแจ้งเตือน(คณิตศาสตร์);<BR>
อ็อบเจ็กต์โกลบอลของแอ็ตทริบิวต์ value, อ็อบเจ็กต์โกลบอลของแอ็ตทริบิวต์ฟังก์ชัน, อ็อบเจ็กต์โกลบอลของแอ็ตทริบิวต์ Constructor (คลาส) และอ็อบเจ็กต์โกลบอลของแอ็ตทริบิวต์อื่น ๆ ได้แก่ NaN, eval, Object และ Math ผลลัพธ์มีดังนี้
ผลลัพธ์แสดงให้เห็นว่า ยกเว้น NaN ที่ไม่สามารถเขียนใหม่ใน IE9 (pre3)/Safari ได้ ทุกอย่างอื่นๆ ได้ถูกเขียนใหม่แล้ว นี่เป็นเพียงสี่รายการเท่านั้น หากคุณสนใจ คุณสามารถทดสอบ The Global Objects ทั้งหมดข้างต้นได้ทีละรายการ ประเด็นก็คือ โดยทั่วไปออบเจ็กต์ในตัวของ JavaScript หลักสามารถถูกแทนที่ได้ แม้ว่าจะไม่มีใครทำเช่นนี้ก็ตาม
มาทดสอบความสามารถในการนับกัน
คัดลอกรหัสรหัสดังต่อไปนี้:
สำหรับ (var a ใน NaN){
การแจ้งเตือน (ก);
-
สำหรับ (var a ใน eval){
การแจ้งเตือน (ก);
-
สำหรับ (var a ใน Object) {
การแจ้งเตือน (ก);
-
สำหรับ (var a ในวิชาคณิตศาสตร์) {
การแจ้งเตือน (ก);
-
ไม่มีป๊อปอัปในทุกเบราว์เซอร์ กล่าวคือ คุณสมบัติไม่ได้รับการแจกแจง หากคุณสนใจ คุณสามารถทดสอบคุณสมบัติการแจงนับของ The Global Objects ข้างต้นทั้งหมดได้ทีละรายการ แน่นอนว่าสำหรับเบราว์เซอร์บางตัว เช่น Firefox Global Objects บางตัวสามารถระบุได้หลังจากเขียนใหม่แล้ว
2. อ็อบเจ็กต์/ฟังก์ชันโกลบอลที่จัดทำโดยสภาพแวดล้อมโฮสต์
เช่น หน้าต่าง การแจ้งเตือน setTimeout เอกสาร ตำแหน่ง ฯลฯ เบราว์เซอร์ส่วนใหญ่จะจำกัดการเขียนใหม่
คัดลอกรหัสรหัสดังต่อไปนี้:
หน้าต่าง = 55;
การแจ้งเตือน (หน้าต่าง);
ประโยคนี้จะทำให้เกิดข้อผิดพลาดภายใต้ IE ทำให้เกิดการคัดลอกที่ผิดกฎหมาย และกล่องป๊อปอัปที่ตามมาจะไม่ถูกดำเนินการ เบราว์เซอร์อื่นยังคงแสดงหน้าต่างขึ้นมาเมื่อไม่มี window=55
เขียนการแจ้งเตือนอีกครั้ง
คัดลอกรหัสรหัสดังต่อไปนี้:
การแจ้งเตือน = 55;
console.log(แจ้งเตือน);
มีการรายงานข้อผิดพลาดภายใต้ IE Firefox/Chrome/Safari/Opera ได้รับการเขียนใหม่ คุณสามารถดูผลลัพธ์ของ 55 ได้จากคอนโซลที่เกี่ยวข้อง จะเห็นได้ว่าเบราว์เซอร์บางตัวไม่รองรับการเขียนออบเจ็กต์/ฟังก์ชันส่วนกลางที่สภาพแวดล้อมโฮสต์จัดเตรียมใหม่ ในขณะที่เบราว์เซอร์อื่นๆ สามารถทำได้
ต่อไปนี้เป็นสองวิธีในการประกาศตัวแปรส่วนกลาง
คัดลอกรหัสรหัสดังต่อไปนี้:
ก1 = 11;
วาร์ a2 = 22;
สำหรับ (ในหน้าต่าง) {
ถ้า(a=='a1'||a=='a2'){
การแจ้งเตือน (ก)
-
-
โค้ดด้านบนจะไม่ปรากฏขึ้นในช่องข้อมูลใน IE ใน IE เนื้อหาภายในจะเป็นดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
//เช่น
ด้วย (host_object){//window
ด้วย (global_object){//Global
ก1 = 11;
วาร์ a2 = 22;
-
-
นั่นคือ a1 และ a2 เป็นคุณลักษณะบนวัตถุ Global ที่จัดทำโดยกลไก JS เป็นประเภทแรกที่กล่าวถึงข้างต้น ไม่ใช่คุณลักษณะบนวัตถุหน้าต่างที่จัดทำโดยสภาพแวดล้อมการโฮสต์ที่สอง ดังนั้นจึงไม่มี a1 และ a2 เมื่อ for in window ใน IE หาก IE ให้การอ้างอิงถึงวัตถุ Global รหัสต่อไปนี้อาจปรากฏขึ้นในช่องข้อมูล
คัดลอกรหัสรหัสดังต่อไปนี้:
สำหรับ (ในทั่วโลก){
ถ้า(a=='a1'||a=='a2'){
การแจ้งเตือน (ก)
-
-
การตกแต่งภายในของ Firefox/Safari/Chrome/Opera อาจมีลักษณะดังนี้
คัดลอกรหัสรหัสดังต่อไปนี้:
//Firefox/Safari/Chrome/Opera
ด้วย (host_object){//window
ก1 = 11;
วาร์ a2 = 22;
ด้วย (global_object){//Global
-
-
นั่นคือ a1 และ a2 เป็นประเภทที่สองที่กล่าวถึงข้างต้น ซึ่งเป็นคุณลักษณะบนหน้าต่างอ็อบเจ็กต์ส่วนกลางที่สภาพแวดล้อมของโฮสต์จัดเตรียมไว้ให้ ดังนั้นเมื่อสำหรับในหน้าต่างมีทั้ง a1 และ a2 และกล่องข้อมูลจะปรากฏขึ้น
ลองดูที่วิธีการของบริษัทอื่นในการประกาศตัวแปรร่วม window.a3 = 33 ซึ่งแสดงว่า a3 ถูกแขวนไว้บนหน้าต่างเป็นคุณสมบัติของหน้าต่าง ดังนั้นจึงสามารถรับ a3 ได้ในเบราว์เซอร์ทั้งหมดเมื่อสำหรับในหน้าต่าง