مصاحبه کاری موقعیتی است که همه ما در مسیر شغلی خودمان با آن روبهرو میشویم. مصاحبه، به خصوص برای مشاغل برنامهنویسی در مقایسه با سایر مشاغل از اهمیت بالاتری برخوردار است. چرا که برنامهنویس باید بتواند در مصاحبه شغلی تمام تواناییهای فنی و انگیزه و اشتیاق خود برای برنامهنویسی و همکاری با یک شرکت را به نمایش بگذارد.
در این مقاله به بررسی مهمترین سوالات مصاحبه برنامهنویس جاوا اسکریپت مخصوص برنامهنویسان تازهکار و مبتدی پرداخته شده است. پس اگر شما هم جزو آن دسته از افراد هستید که به تازگی در یک دوره آموزش جاوا اسکریپت شرکت کردهاید و میخواهید وارد بازار کار شوید، این مقاله برای شماست.
۱. انواع دیتا تایپ در جاوا اسکریپت را نام ببرید و توضیح دهید.
دیتا تایپها در جاوا اسکریپت به دو دسته تقسیم میشوند:
۱. Primitive:
دادههای Primitive دادههایی هستند که مستقیماً در حافظه ذخیره میشوند. این نوع دادهها شامل موارد زیر هستند:
- اعداد (Number)،
- رشتهها (Strings)،
- مقادیر بولین (Boolean)،
- مقادیر undefined و
- null.
۲. Non-primitive:
دادههای Non-Primitive مجموعهای از دادههای Primitive هستند که به عنوان مرجع (References) در حافظه ذخیره میشوند و به جای نگهداری مقدار واقعی آن متغیر، به مکان ذخیرهسازی داده اشاره دارند. این دادهها شامل موارد زیر هستند:
- آرایهها (Arrays)،
- اشیاء (Objects)
- توابع (Functions).
همچنین برای شناخت نوع داده یک متغیر در جاوا اسکریپت، میتوان از اپراتور typeof استفاده کرد.
بیشتر بخوانید: در مقاله “راهنمای کامل دیتاتایپها در جاوا اسکریپت” با جزئیات بیشتری به انواع دیتا تایپ در جاوا اسکریپت و نحوه پیادهسازی آنها پرداخته شده است.
۲. Hoisting را در جاوا اسکریپت توضیح دهید.
هویستینگ در جاوا سکریپت به این معناست که متغیرها و توابع به صورت پیشفرض به قسمت بالای کد منتقل میشوند. به عبارت دیگر شما میتوانید قبل از تعریف، متغیر یا تابعی را که میخواهید در بخشهای بعدی کد استفاده میکنید، بیاورید.
برای مثال، اگر متغیری را قبل از تعریفش در کد بیاورید، جاوا اسکریپت آن را به صورت خودکار به بالای کد منتقل میکند. در نتیجه، میتوانید آن متغیر را حتی قبل از تعریف و مقداردهی در کد استفاده کنید. برای مثال:
age = 25; console.log(age); var age;
در این کد، یک متغیر به نام “age” داریم که مقدار این متغیر برابر با عدد ۲۵ است. همانطور که در خط سوم میبینید، تعریف این متغیر بعد از دستور چاپ متغیر آمده است. در نتیجه طبق اصل هویستینگ در جاوا اسکریپت میتوان مقدار متغیر “age” را چاپ کرد، حتی اگر قبل از اینکه مقدار اصلی آن تعیین شود.
این اصل برای توابع هم صدق میکند. شما میتوانید یک تابع را فراخوانی کنید حتی اگر تعریف آن تابع را بعداً در کد اضافه کنید.
sayHello(); function sayHello() { console.log("سلام!"); }
در این کد هم تعریف تابع، بعد از فراخوانی تابع آورده شده است.
نکته مهم این است که در هویستینگ فقط تعریف متغیرها به بالای کد منتقل میشود، نه مقداردهی آنها. به عبارت دیگر، مقداری که به یک متغیر میدهید همزمان با تعریف متغیر به بالای کد منتقل نمیشود. بنابراین، برای جلوگیری از مشکلات ناخواسته و به منظور ایجاد کد خواناتر، بهتر است که متغیرها را قبل از استفاده، تعریف کنید.
۳. دو اپراتور “==” و “===” چه تفاوتی باهم دارند؟
اپراتورهای “==” و “===”, هر دو اپراتورهای مقایسهایاند. اما تفاوت اصلی بین آنها این است که “==” برای مقایسه مقادیر استفاده میشود، در حالی که “===” برای مقایسه هم مقادیر و هم انواع دادهها به کار میرود.
برای مثال فرض کنید دو متغیر داریم:
var x = 2; var y = "2";
اگر از “==” استفاده کنیم:
(x == y)
خروجی این کد مقدار true است چون مقدار x و y یکسان است، حتی اگر نوع دادهها متفاوت باشد.
و اگر از “===” استفاده کنیم:
(x === y)
اینجا مقدار false برگردانده میشود چون علاوه بر مقدار متفاوت، نوع دادههای x و y هم متفاوت است. x از نوع دادهی “number” دارد و y از نوع دادهی “string” است.
بیشتر بخوانید: “مروری بر عملگرها و عبارات در جاوا اسکریپت“
۴. تفاوت var و let در جاوا اسکریپت چیست؟
- کلمهکلیدی “var” از ابتدای معرفی و توسعه زبان جاوا اسکریپت، استفاده میشد. در حالی که کلمهکلیدی “let” از سال ۲۰۱۵ به این زبان اضافه شد.
- متغیرهای “var” از نوع function scope هستند، یعنی در هر نقطهای در داخل تابع قابل دسترسیاند. اما در “let”، دامنه متغیرها محدود به بلوکی است که در آن تعریف شدهاند.
- در استاندارد ECMAScript 2015 (یا ES6)، هر دو “let” و “var” هویست میشوند، اما متغیرهای “var” در ابتدا با مقدار “undefined” مقداردهی میشوند. در مورد “let”، از ابتدا تا زمانی که مقداردهی انجام نشده باشد، در “منطقه مرده زمانی” (temporal dead zone) قرار دارند. پس اگر قبل از تعریف متغیرهای “let” در یک بلوک، از آنها استفاده کنید، با خطای مرجع (ReferenceError) مواجه میشوید.
۵. NaN در جاوا اسکریپت به چه معناست؟
ویژگی NaN در جاوااسکریپت به معنای Not-a-Number است. این به معنای مقداری است که به عنوان یک عدد شناخته نمیشود. برای بررسی اینکه یک مقدار NaN است یا نه، از تابع ()isNaN استفاده میشود.
توجه: تابع ()isNaN مقدار دادهشده را به عدد تبدیل و سپس با NaN مقایسه میکند.
برای مثال:
- تابع `isNaN(“Hello”)` خروجی`true` را برمیگرداند چون “Hello” به عنوان یک مقدار متنی نامعتبر تلقی میشود و به NaN تبدیل میشود.
- تابع `isNaN(345)` خروجی `false` را برمیگرداند چون 345 یک عدد قانونی است و نامعتبر نیست.
- تابع `isNaN(‘1’)` خروجی `false` را برمیگرداند چون ‘1’ به عنوان مقدار متنی تبدیل به دیتا تایپ عدد میشود که معادل با 0 است.
- تابع `isNaN(true)` خروجی `false` را برمیگرداند چون مقدار true به دیتا تایپ عدد تبدیل میشود که معادل با 1 است.
- تابع `isNaN(false)` خروجی `false` را برمیگرداند چون مقدار false به دیتا تایپ عدد تبدیل میشود که معادل با 0 است.
- تابع `isNaN(undefined)` خروجی true` را برمیگرداند چون undefined به دیتا تایپ عدد تبدیل نمیشود و به NaN تبدیل میشود.
۶. تفاوت ()exec و ()test در چیست؟
در جاوااسکریپت، دو متد با عناوین `()exec` و `()test` برای کار با عبارات بازگشتی (RegExp) استفاده میشود.
`()exec`: با استفاده از این متد، میتوانیم یک رشته را برای یک الگوی خاص جستجو کنیم. اگر پیدا شود، خود الگوی مطابقتیافته بازگردانده میشود؛ در غیر این صورت اگر مطابقتی پیدا نشود، `null` را باز میگرداند.
`()test`: این متد هم برای بررسی یک رشته برای یک الگوی خاص استفاده میشود. با این تفاوت که نتیجه آن یک مقدار بولین است، به این معنا که اگر الگو در رشته پیدا شود، مقدار `true` را برمیگرداند و در غیر این صورت `false`.
۷. مفهوم Scope و Scope chain را در جاوا اسکریپت توضیح دهید.
در جاوا اسکریپت، مفهوم “Scope” یا دامنه تعیین میکند که در بخشهای مختلف کد، چه متغیرها و توابعی قابل دسترس هستند.
در جاوااسکریپت، سه نوع Scope وجود دارد:
۱. Global Scope: متغیرها یا توابعی که در فضای سراسری (global namespace) تعریف میشوند، دارای دامنه سراسریاند. یعنی تمام متغیرها و توابع از هر نقطهای در کد قابل دسترسی هستند.
۲. Local or Function Scope: متغیرها یا توابعی که داخل یک تابع تعریف میشوند، دارای دامنه محلی یا تابعی هستند. یعنی همه متغیرها و توابع تعریفشده در یک تابع، فقط در داخل آن تابع قابل دسترسی هستند.
۳. Block Scope: دامنه بلوکی به متغیرهایی مربوط میشود که با استفاده از let و const تعریف میشوند. متغیرهای تعریفشده با var دامنه بلوکی ندارند. این مفهوم به ما میگوید که هر متغیری که داخل یک بلوک `{ }` تعریف شود، فقط در داخل همان بلوک قابل دسترسی است.
Scope Chain: موتور جاوا اسکریپت برای پیدا کردن متغیرها از Scope استفاده میکند. به عبارت دیگر، اگر متغیر در دامنه محلی یا تابعی (Local or Function Scope) پیدا نشود، سعی میکند متغیر را در دامنه خارجی بیابد. اگر متغیر در دامنه خارجی نیز پیدا نشود، به دامنه سراسری میرود و اگر همانجا نیز پیدا نشود، یک خطای مرجع (ReferenceError) شناخته میشود.
۸. مفهوم کلوژر (Closure) در جاوا اسکریپت را توضیح دهید.
Closure در جاوا اسکریپت وقتی ایجاد میشود که یک تابع داخلی (inner function) از یک تابع خارجی (outer function) و متغیرهای تابع خارجی استفاده کند.
مثال:
function outerFunction(x) { // تابع داخلی ایجاد میشود function innerFunction(y) { return x + y; } return innerFunction; } const closure = outerFunction(10); const result = closure(5); console.log(result); // نتیجه: 15
۹. مفهوم Object Prototypes در جاوا اسکریپت به چه معناست؟
در جاوا اسکریپت، هر شیء (Object) از قالب مشخصی به نام “Prototype” به ارث برده میشود. این Prototype حاوی ویژگیها و رفتارهای مشترکی است که تمام اشیا از آن بهره میبرند. به این ترتیب، اگر ویژگیها و توابعی در Prototype تعریف شوند، تمام اشیا که از آن Prototype ایجاد میشوند، این ویژگیها و توابع را دارا خواهند بود.
۱۰. انواع error را در جاوا اسکریپت توضیح دهید.
در جاوا اسکریپت، دو نوع خطا وجود دارد:
۱. خطای نحوی (Syntax Error): این نوع خطاها وقتی رخ میدهند که در کد، اشتباه یا مشکلات املایی وجود داشته باشد که باعث میشود برنامه اصلاً اجرا نشود یا برنامه در حال اجرا نیمهراه قطع شود. در این خطاها، پیامهای خطا به عنوان نتیجه عملیات نادرست نمایش داده میشوند.
۲. خطای منطقی (Logical Error): این نوع خطاها زمانی رخ میدهند که منطق برنامه اشتباه باشد. در این حالت، برنامه بدون مشکل اجرا میشود، اما نتایج خروجی نادرستی است. تصحیح این نوع خطاها گاهی از خطاهای نحوی سختتر است چرا که برنامه خطایی نمایش نمیدهد.
بیشتر بخوانید: “چطور با برنامه نویسی جاوا اسکریپت کسب درآمد کنیم؟“
کلام آخر
مصاحبه کاری ممکن است از یک طرف برای شخص مصاحبهشونده چالش بزرگی محسوب شود. اما از طرف دیگر برای کارفرما این فرصت بسیار عالی است تا با نیروهای متخصص آشنا شود و بتواند بهترین انتخاب را برای شرکت، سازمان یا پروژه خود داشته باشد.
در این مقاله به ۱۰ سوال رایج در مصاحبه استخدامی برنامهنویس جاوا اسکریپت مبتدی پرداخته شد. قطعا تنوع و تعداد سؤالات مصاحبه به همین تعداد محدود نیست و سؤالات بسیاری را شامل میشود. با این حال، میتوان با اطمینان گفت که اگر در دوره آموزش جاوا اسکریپت شرکت کنید و با موفقیت آن را بگذرانید، هیچ مشکلی از بابت پاسخ به سوالات مصاحبه نخواهید داشت و به راحتی از پس آن برخواهید آمد.
در مقالات آینده به بررسی سوالات مصاحبه استخدامی جاوا اسکریپت برای برنامهنویسان باتجربه نیز خواهیم پرداخت.
The post سوالات مصاحبه کاری جاوا اسکریپت (مخصوص برنامهنویسان مبتدی) appeared first on آمانج آکادمی مرکز آموزش های برنامه نویسی ، دیجیتال مارکتینگ و دیزاین.