تحليل نهائي مسابقة المسابقة في hh.ru يقف في # HolyJS18

مرحبا ، هذا هو الجزء الأخير من تحليل الأسئلة من موقفنا.


الرد على الأسئلة هنا .


تحليل الجولات الأربع الأولى هنا .



هنا ، لا يتم تجميع الأسئلة المتعلقة بالموضوعات عمليًا ، فنحن نحلل كل شيء واحدًا تلو الآخر.


دعنا نذهب:


ماذا ستكون النتيجة؟

let i = 0; let a = 1; for (; a >= 0; i++) { a -= 0.1; } console.log(i); a) 1 b) 11 c)  d) 10 

الإجابة + تحليل

ب) 11
كل شيء بسيط جدا هنا. هذا هو أكثر من مسألة الذهن. سيتم تنفيذ الدورة 11 مرة ، لأن نحن لسنا صارمين
أكبر من > و أكبر من أو يساوي >= .


ماذا ستكون النتيجة؟

 {} + []; a) 0 b) null c) '[object Object]' d) NaN 

الإجابة + تحليل

أ) 0
الخدعة هنا هي {} سيتم تفسيرها ليس ككائن ، ولكن ككتلة فارغة من التعليمات البرمجية. لذلك ، يتم تحويل التعبير إلى +[] ، وهذا هو 0 ، لأن + قبل تحويل القيمة إلى رقم. أود ملاحظة أنه إذا تمت كتابة الشفرة كـ console.log({} + []); ، ثم سيكون [object Object] ، لأن هنا {} سيتم تفسيرها ككائن.


ماذا ستكون النتيجة؟

 [] + {}; 

أ) 0
ب) لاغية
ج) "[كائن كائن]"
د) NaN


الإجابة + تحليل

ج) "[كائن كائن]"
هنا ، يتم تخفيض كلا المعاملتين ، وفقًا للقواعد ، إلى سلسلة من صفيف فارغ - هذه سلسلة فارغة ، وكائن [object Object]


ما سوف يخرج هذا الرمز؟

 let response = { data: '', errors: { code: 403 } }; console.log(typeof response.data.link); a) undefined b) object c) string d) function 

الإجابة + تحليل

د) وظيفة
يحتوي النموذج الأولي للسلسلة على طريقة ارتباط ، وبالتالي فإن الإجابة الصحيحة هي function


ما سوف يخرج هذا الرمز؟

 const button = document.querySelector('button'); button.addEventListener('click', () => { console.log('FUS'); }); button.addEventListener('click', () => Promise.resolve('RO').then((x) => console.log(x))); button.addEventListener('click', () => { console.log('DAH!'); }); button.click(); a) FUS RO DAH! b) FUS DAH! RO c) RO FUS DAH! d) DAH! RO FUS 

الإجابة + تحليل

ب) الفتح داه! ريال عماني
نحن هنا نطلق click برمجية ، ونحصل على مكدس النداء ، يتم تشغيل المعالج الأول - نخرج FUS ، FUS إلى الثانية - نضيف RO إلى قائمة الانتظار ، لأن click لا يزال على المكدس - لا تدعو الوعد. نحن ندخل المعالج التالي - إخراج DAH! . click عمل ، قائمة الانتظار فارغة ، يتم تشغيل الوعد.


ماذا سيعرض هذا الرمز عند النقر على زر؟

 const button = document.querySelector('button'); button.addEventListener('click', () => { console.log('FUS'); }); button.addEventListener('click', () => Promise.resolve('RO').then((x) => console.log(x))); button.addEventListener('click', () => { console.log('DAH!'); }); button.click(); a) FUS RO DAH! b) FUS DAH! RO c) RO FUS DAH! d) DAH! RO FUS 

الإجابة + تحليل

أ) الفتح RO DAH!
هنا ينقر المستخدم على الزر ، لذلك لا توجد click على المكدس ، وفي المعالج الثاني ، سوف يعمل الوعد فورًا.


ما سوف يخرج هذا الرمز؟

 console.log(typeof Function````); a) TypeError b) SyntaxError c) 'function' d) 'undefined' 

الإجابة + تحليل

د) "غير محدد"
عند استخدام القيم الحرفية للقالب بعد اسم الوظيفة ، يتم استدعاؤها بالصفيف حيث توجد قيمة تم تمريرها وصفيف بقيمة raw . Function ، مثل new Function منشئ new Function . عند تمرير سلسلة فارغة إلى داخلها ، نحصل على دالة للنموذج (){} ، على التوالي ، مع أي وسيطة نسميها ، فسوف تعود بدون undefined ، وهنا يطلق عليها مصفوفة - ['', raw: ['']] . هذا هو تقريبا نفس Function('')('')


ما سوف يخرج هذا الرمز؟

 function f(a, b, c) { 'use strict'; return f.length; } console.log(f(100, 2)); a) undefined b) 2 c) 3 d)  

الإجابة + تحليل

ج) 3
وصف شامل مع MDN :
خاصية الطول هي خاصية لكائن دالة وتشير إلى عدد الوسائط التي تتوقعها الوظيفة ، أي عدد المعلمات الرسمية. هذا المبلغ لا يشمل المعلمات المتبقية.


ماذا ستكون النتيجة؟

 const dict = {}; dict[[1]] = 2; dict[dict] = 3; dict[1 / 0] = 4; a) {'1': 2, '[object Object]': 3, 'Infinity': 4} b) Assignment to constant variable c) {'[1]': 2, 'dict': 3, '1/0': 4} d) {'1': 4, '[object Object]': 3} 

الإجابة + تحليل

أ) {'1': 2 ، '[كائن كائن]': 3 ، 'إنفينيتي': 4}
أخطاء Assignment to constant variable لن يكون هنا ل لا يسمح const بتغيير الرابط ، ولكن يمكنك تعديل الكائن. يجب أن تكون جميع مفاتيح الكائنات سلاسل ، بحيث يتم استدعاء toString لكل منها. يتم تحويل الصفيف إلى 1 ، الكائن إلى [object Object] ، وعند القسمة على صفر ، Infinity الحصول على Infinity .


ما سوف يخرج هذا الرمز؟

 console.log(!![] > [], ![] == []); a) false false b) false true c) true true d) true false 

الإجابة + تحليل

ج) صحيح صحيح
المقارنات > >= <= < - تتسبب في مقارنة حسابية ، أولاً نلقي الصفيف على قيمة منطقية ونحققها ، ثم نحصل على مقارنة 1> 0 ، والتي تعطي بوضوح حقيقة. في الجزء الثاني من السؤال ، وضعنا الصفيف على " false ، ثم " false هي " 0 ، "و" "الصفيف" "بدائي" "، ونحصل على سلسلة فارغة '' ، وهي متساوية.


بهذا نختتم تحليلنا ، شكرا لك على اهتمامك!

Source: https://habr.com/ru/post/ar431744/


All Articles