من المعروف للجميع أن بناء جملة JavaScript هو يرثى لها.
دعونا نضع صورة أولاً
الرمز كما يلي:
نسخة الكود كما يلي:
{} + [] ؛ // 0
[] + {} ؛ // "[كائن كائن]"
{} + [] == [] + {} ؛ // خطأ شنيع
({} + [] == [] + {}) ؛ // حقيقي
من المحتمل أن يكون مثل هذا المأزق المثير للبناء أمرًا غريبًا مثل JavaScript.
أعتقد أنه لا يمكن فهم معظم أحذية الأطفال التي لا تدرس مجمعي JavaScript على الإطلاق. (على الأقل أجدها لا تصدق)
في وقت لاحق ، ذهبت إلى فتاة بايدو لفترة من الوقت ثم أدركت ذلك فجأة!
لنلقي نظرة على هذا الرمز:
نسخة الكود كما يلي:
{
ج: 1
}
أعتقد أن معظم أحذية الأطفال ستعتقد أن هذا قياس مباشر للكائن من النظرة الأولى.
ماذا عن هذا الرمز؟
نسخة الكود كما يلي:
{
var a = 1 ؛
}
هل سيحدث المتصفح لأخطاء بناء الجملة؟
من الواضح لا! إذا فكرت في الأمر بعناية ، فسوف نفهم أن هذه كتلة بيان.
نسخة الكود كما يلي:
إذا (isnumber) {
var a = 1 ؛
}
عند الحديث عن هذا ، ربما اكتشفت أنه سيكون هناك غموض في JavaScript بدءًا من {.
فكيف يتعامل برنامج التحويل البرمجي JavaScript مع هذا الغموض؟
لحل هذه المشكلة ، تكون طريقة ECMA بسيطة للغاية وخام: عند تحليل بناء الجملة ، إذا بدأت عبارة بـ "{" ، يتم تفسيرها فقط على أنها كتلة بيان.
هذه حقا طريقة الغش!
نظرًا لأن جميعهم من كتل بيان ، لماذا لا يوجد {A: 1} ليس لديهم أخطاء في بناء الجملة؟
في الواقع ، هنا ، يفهم المحللون A كعلامة. يتم استخدام العلامات لمطابقة الفاصل ومتابعة عبارات القفزات الاتجاهية.
لذلك ، فإن طريقة الكتابة هذه ستلقي استثناءً:
نسخة الكود كما يلي:
{
ج: الدالة () {}
}
لأن الدالة () {} ليست إعلان دالة ، كما أنها ليست تعبير وظيفة.
في هذه المرحلة ، يجب أن يكون لدى الجميع مفهوم أساسي للمعاملة الغريبة لـ {}. دعونا نلقي نظرة على الجمل القليلة المذكورة في بداية المقالة:
نسخة الكود كما يلي:
{} + [] ؛ // 0
[] + {} ؛ // "[كائن كائن]"
{} + [] == [] + {} ؛ // خطأ شنيع
({} + [] == [] + {}) ؛ // حقيقي
الأول ، لأن {} هو كتلة بيان ، يمكن فهم الكود على النحو التالي:
نسخة الكود كما يلي:
إذا (1) {}
+[]
وبالتالي فإن قيمة الإرجاع هي 0.
ثانياً ، نظرًا لأن {} ليس في بداية البيان ، فهو كمية مباشرة كائن مباشر ، يتم إضافة الصفيف الفارغ والكائن الفارغ مباشرة ، ويتم إرجاع "[كائن الكائن]".
أفهم المقالين الأول والثاني ، لكن ليست هناك حاجة لشرح المقال الثالث.
المادة 4 ، لأنها تبدأ بـ () ، يتم تحليل الأول {} في الكمية المباشرة للكائن ، وبالتالي فإن الصيغتين متساوية وترجعان صحيحان.