Frontend Developer at Delino
سوالات جاوا اسکریپتی برای مصاحبه (قسمت ۱)
لینک زیر که حدود 90 سوال چالشی ایه جاوا اسکریپته رو دوست خوبم حمیدرضا جان برای من ارسال کردن و من تصمیم گرفتم در چند قسمت این سوالات رو برای شما دوستان خوبم ترجمه کنم.
https://github.com/lydiahallie/javascript-questions
اگه مصاحبهی یکی از شرکتهای بزرگ (چه ایرانی و چه غیرایرانی) رو رفته باشین، از همین سوالات js core ای ازتون سوال میپرسن
پاسخ سوالات رو در انتهای مقاله نوشتم.
توی کامنتها بهم بگین که اگه واستون مفید بوده ادامه سوالات رو ترجمه کنم یا چی؟
سوال اول: خروجی کد زیر بنظرتون کدوم گزینه میشه؟
- A:
Lydia
andundefined
- B:
Lydia
andReferenceError
- C:
ReferenceError
and21
- D:
undefined
andReferenceError
سوال دوم: خروجی این یکی کد کدوم گزینست ؟
- A:
0 1 2
and0 1 2
- B:
0 1 2
and3 3 3
- C:
3 3 3
and0 1 2
سوال سوم: بازم خروجی این یکی کد کدوم گزینست ؟
- A:
20
and62.83185307179586
- B:
20
andNaN
- C:
20
and63
- D:
NaN
and63
سوال چهارم: خروجی چیه ؟
- A:
1
andfalse
- B:
false
andNaN
- C:
false
andfalse
سوال پنجم: کدام یک از گزینهها درست است؟
- A:
mouse.bird.size
is not valid - B:
mouse[bird.size]
is not valid - C:
mouse[bird["size"]]
is not valid - D: All of them are valid
سوال ششم: خروجی کد زیر چی میشه؟
- A:
Hello
- B:
Hey!
- C:
undefined
- D:
ReferenceError
- E:
TypeError
سوال هفتم: خروجی کدومه؟
- A:
true
false
true
- B:
false
false
true
- C:
true
false
false
- D:
false
true
true
سوال هشتم: خروجی ؟
- A:
orange
- B:
purple
- C:
green
- D:
TypeError
سوال نهم: خروج؟
- A:
{}
- B:
ReferenceError: greetign is not defined
- C:
undefined
سوال دهم: خ؟
- A: Nothing, this is totally fine!
- B:
SyntaxError
. You cannot add properties to a function this way. - C:
"Woof"
gets logged. - D:
ReferenceError
خب حالا میریم سراغ پاسخ سوالات
جواب سوال اول گزینه D میشه
در کنسول لاگ اول، جاوا اسکریپت سعی داره مقدار متغیر name رو لاگ کنه و چون هنوز تعریف نشده، میگرده ببینه جایی تعریفش کردین یا نه، خب میبینه اون پایین یه متغیر از نوع var با نام name ایجاد شده، پس واسه name مقدار undefined رو لاگ میکنه (چون هنوز به خط انتصاب مقدارش نرسیده)، در کنسول لاگ دوم بازم جاوا اسکریپت تلاش میکنه متغیر age رو چاپ کنه، ولی باز میگه مرد حسابی منو مسخره کردی، اینم خو هنوز تعریف نکردی، ولی خب وظیفش اینکه بگرده ببینه جایی پایین تر تعریفش کردی یا نه، خب میبینه این متغیر از اون نوع let تعریف شده، ولی برخلاف متغیرهای var مقدار undefined رو چاپ نمیکنه بلکه ReferenceError میده، چون میگه باید قبلش تعریفش میکردی، یه نکته هم اینکه رفتار const هم شبیه let میمونه
جواب سوال دوم گزینه C میشه
به این دلیل که جاوا اسکریپت به صورت event queue کار میکنه، دستورات درون callback function در setTimeout بعد از loop اجرا میشن، در loop اول نوع متغیر i از جنس var تعریف شده، در نتیجه این متغیر به صورت global تعریف میشه، پس در مرحلهی آخر loop مقدار 3 رو به خودش میگیره و در نهایت setTimeout سه بار 3 رو نمایش میده، در loop دوم نوع متغیر این بار از جنس let تعریف شده، و این نوع متغیر اصطلاحاً block-scoped عه و در بین همون آکولادهای loop فقط زنده میمونه، و هر سری مقدار هر step رو نمایش میده، const هم شبیه let عمل میکنه.
جواب سوال سوم گزینه B میشه
به تابع diameter میگن regular function و به تابع perimeter میگن arrow function، در arrow function ها، کلمهی this به scope خودش اشاره میکنه، نه به shape object
جواب سوال چهارم گزینه A میشه
اون علامت + پشت true تلاش میکنه یک عملوند رو به عدد تبدیل کنه، true میشه 1 و false میشه 2
رشتهی Lydia یک مقدار درست و صحیح محسوب میشه، حالا ما با علامت تعجب پشتش داریم ازش میپرسیم که آیا این مقدار درستی که داری، یک مقدار اشتباست؟ که منطقاً جواب false میده بهمون
جواب سوال پنجم گزینه A میشه
در جاوا اسکریپت، تمام کلیدهای object از نوع رشتهای هستند (مگر اینکه Symbol باشند). حتی اگر ما کلیدها رو به صورت یک رشته تعریف نکنیم باز اونا رو به زیر رشته تبدیل میکنه.
گزینه B به این صورت تفسیر میشه که ابتدا مقدار bird.size را بدست میاره که میشه small و سپس مقدار ["mouse["small که میشه true رو برمیگردونه، گزینه C هم به همین صورته
اما در این صورت مسئله، علامت dot در گزینه A به ما جواب درستی نمیده، چون mouse.bird به ما undefined رو برمیگردونه و بعد میگه undefined.size که یک دستور اشتباست و مفسر خطا میده
جواب سوال ششم گزینه A میشه
در جاوا اسکریپت همهی object ها به وسیلهی reference با هم تعامل دارن، در متغیر c ما یک آبجکت رو با reference اون نگه داشتیم، حالا وقتی مقدار c رو توی d میریزید عین این میمونه d هم به همون آبجکت متصل شده
وقتی شما یک object رو تغییر بدید، همهی اونها رو تغییر دادید.
جواب سوال هفتم گزینه C میشه
نوع new Number یک built-in function constructor عه، در نگاه اول یک عدد به نظر میرسه ولی واقعاً یک عدد نیست، و این یه سری ویژگیهای اضافی داره و همینطور یک object عه، وقتی از == استفاده میکنید فقط دارید مقدارشون رو بررسی میکنید که هر دو 3 هستن ولی وقتی از === استفاده میکنید هم مقدارش و هم نوعش رو بررسی میکنید.
جواب سوال هشتم گزینه D میشه
تابع colorChange یک تابع static عه و نمیتونید از طریق child بهش برسید، بنابراین freddie یک child عه و تابع colorChange در این شرایط در در دسترس نیست.
جواب سوال نهم گزینه A میشه
به کد صورت مسئله خوب دقت کردید؟ ... اولی greeting و دومی greetign، ولی جاوا اسکریپت مقدار اون رو به درستی چاپ میکنه و خطایی رخ نمیده، جاوا اسکریپت اون رو به صورت global.greetign یا window.greetign با مقدار یک empty object در نظر میگیره، اگه میخوایید به جاوا اسکریپت اجبار کنید که متغیرهامون حتما type داشته باشن باید از کلمه کلیدی use strict استفاده کنید.
جواب سوال دهم گزینه A میشه
تعجب نکنید! چنین چیزی در جاوا اسکریپت امکان پذیره، زیرا function ها یک نوع خاصی از object ها هستند. (همه چیز در کنار primitive type ها یک نوع object هستند.)
مطلبی دیگر از این انتشارات
واقعا «Node.js» رو یاد داریم؟ - قسمت دوم - معماری نودجیاس
مطلبی دیگر از این انتشارات
میشه (a==1 && a==2 && a==3) که true بشه آیا؟
مطلبی دیگر از این انتشارات
نصب و راه اندازی flow