يشير JavaScript المذكور هنا إلى بيئة المتصفح بما في ذلك البيئة المضيفة. الأول هو كائن ECMAScript العالمي، والثاني هو الكائن/الوظيفة العامة ضمن البيئة المضيفة (المضيف).
1. كائنات JavaScript الأساسية المضمنة، أي الكائنات التي يوفرها تطبيق ECMAScript والتي لا تعتمد على البيئة المضيفة
هذه الكائنات موجودة بالفعل (تم إنشاء مثيل لها) قبل تنفيذ البرنامج. يسمى ECMAScript بالكائن العام وينقسم إلى الأنواع التالية
1. خصائص قيمة الكائن العالمي. هناك NaN، إنفينيتي، غير محدد.
2. خصائص وظيفة الكائن العالمي. هناك eval وparseInt وparseFloat وisNaN وisFinite وdecodeURI وencodedURI وencodeURIComponent
3. خصائص المنشئ للكائن العالمي (خصائص المنشئ للكائن العالمي). هناك كائن، وظيفة، صفيف، سلسلة، منطقية، رقم، تاريخ، RegExp، خطأ، EvalError، RangeError، ReferenceError، SyntaxError، TypeError، URIError.
4. يمكن رؤية الخصائص الأخرى للكائن العام على أنها فئات ثابتة في Java ويمكن استخدامها مباشرة مع اسم الفئة + الفترة + اسم الطريقة. هناك الرياضيات، JSON.
تشير مواصفات ECMAScript إلى أن هذه الكائنات العامة (الكائن العام) لها خصائص قابلة للكتابة، أي أن قابلية الكتابة صحيحة، وقابلة للإحصاء (قابلة للتعداد) غير صحيحة، أي أنه لا يمكن استخدامها في التعداد. ECMAScript لديه هذا القسم
ما لم يتم تحديد خلاف ذلك، فإن الخصائص القياسية المضمنة للكائن العمومي لها سمات {[[Writable]]: true، [[Enumerable]]: false، [[Configurable]]: true}.
على الرغم من أن المواصفات تشير إلى أنه يمكن إعادة كتابة الكائن الشامل، إلا أنه لن يقوم أحد بإعادة كتابتها. هذا مجرد اختبار.
انسخ رمز الكود كما يلي:
نان = 11؛
إيفال = 22؛
الكائن = 33؛
الرياضيات = 44؛
تنبيه (نان)؛
تنبيه (تقييم)؛
تنبيه (كائن)؛
تنبيه(الرياضيات);<BR>
الكائن العام لسمة القيمة، والكائن العام لسمة الوظيفة، والكائن العام لسمة المنشئ (الفئة)، والكائن الشامل للسمات الأخرى هو NaN، وeval، وObject، وMath. النتائج هي كما يلي
تظهر النتائج أنه باستثناء NaN الذي لا يمكن إعادة كتابته في IE9 (pre3)/Safari، تمت إعادة كتابة كل شيء آخر. فيما يلي أربع كائنات مدرجة فقط، إذا كنت مهتمًا، فيمكنك اختبار جميع الكائنات العالمية المذكورة أعلاه واحدًا تلو الآخر. النقطة المهمة هنا هي أنه يمكن تجاوز كائنات JavaScript الأساسية بشكل عام، على الرغم من أنه لا أحد يفعل ذلك.
دعونا نختبر قابليتها للتعداد
انسخ رمز الكود كما يلي:
ل(فار في نان){
تنبيه (أ)؛
}
ل(فار في التقييم){
تنبيه (أ)؛
}
ل(فار في الكائن){
تنبيه (أ)؛
}
ل(فار في الرياضيات){
تنبيه (أ)؛
}
لا توجد نافذة منبثقة في جميع المتصفحات، أي لم يتم تعداد الخصائص. إذا كنت مهتمًا، يمكنك اختبار خصائص التعداد لكل الكائنات العامة المذكورة أعلاه واحدًا تلو الآخر. بالطبع، بالنسبة لبعض المتصفحات مثل Firefox، يمكن تعداد بعض الكائنات العامة بعد إعادة كتابتها.
2. الكائنات/الوظائف العالمية التي توفرها البيئة المضيفة
مثل النافذة، والتنبيه، وsetTimeout، والمستند، والموقع، وما إلى ذلك، فإن معظم المتصفحات ستقيد إعادة كتابتها.
انسخ رمز الكود كما يلي:
النافذة = 55؛
تنبيه (نافذة)؛
ستتسبب هذه الجملة في حدوث خطأ ضمن IE، مما يؤدي إلى النسخ غير القانوني، ولن يتم تنفيذ المربع المنبثق التالي. لا تزال المتصفحات الأخرى تظهر النافذة عند عدم وجود window=55.
إعادة كتابة التنبيه مرة أخرى
انسخ رمز الكود كما يلي:
تنبيه = 55؛
console.log(alert);
تم الإبلاغ عن خطأ ضمن IE. تمت إعادة كتابة Firefox/Chrome/Safari/Opera. يمكنك رؤية إخراج 55 من وحدة التحكم المقابلة. يمكن ملاحظة أن بعض المتصفحات لا تدعم إعادة كتابة الكائنات/الوظائف العامة التي توفرها البيئة المضيفة، بينما يستطيع البعض الآخر القيام بذلك.
فيما يلي طريقتان للإعلان عن المتغيرات العالمية
انسخ رمز الكود كما يلي:
أ1 = 11؛
فار a2 = 22;
ل(في النافذة){
إذا(أ=='a1'||a=='a2'){
تنبيه (أ)
}
}
لن يظهر الكود أعلاه في مربع المعلومات في IE، ويكون المحتوى الداخلي كما يلي:
انسخ رمز الكود كما يلي:
//أي
مع (host_object) {//window
with(global_object){//Global
أ1 = 11؛
فار a2 = 22;
}
}
أي أن a1 وa2 هما السمات الموجودة على الكائن الشامل التي يوفرها محرك JS كالنوع الأول المذكور أعلاه، وليست السمات الموجودة على كائن window التي توفرها بيئة الاستضافة الثانية. لذلك، a1 وa2 غير موجودين عندما يكونان في نافذة في IE. إذا كان IE يوفر مرجعًا للكائن العمومي، فربما يمكن للتعليمات البرمجية التالية أن تظهر مربع معلومات.
انسخ رمز الكود كما يلي:
ل(أ في العالمية){
إذا(أ=='a1'||a=='a2'){
تنبيه (أ)
}
}
ربما يبدو الجزء الداخلي من Firefox/Safari/Chrome/Opera كما يلي
انسخ رمز الكود كما يلي:
//فايرفوكس/سفاري/كروم/أوبرا
مع (host_object) {//window
أ1 = 11؛
فار a2 = 22;
with(global_object){//Global
}
}
أي أن a1 وa2 هما النوع الثاني المذكور أعلاه، وهما سمتان في نافذة الكائن العامة التي توفرها البيئة المضيفة. ولذلك، عندما يكون في النافذة، يوجد كل من a1 وa2، وينبثق مربع المعلومات.
دعونا نلقي نظرة على طريقة الطرف الثالث للإعلان عن المتغير العام window.a3 = 33. وهذا يوضح أن a3 معلق على النافذة كخاصية للنافذة، لذلك يمكن الحصول على a3 في جميع المتصفحات عندما يكون في window.