مفاهیم پایه جاوا اسکریپت - نوع های داده ای

در پست قبلی از فصل دوم آموزش جاوا اسکریپت برای مبتدی ها آموختیم که چطور می تونیم یک متغیر و ثابت رو تعریف کنیم. شاید حالا برایتان این سوال باشد که مقادیر داده ایکه به یک متغیر یا ثابت اختصاص می دهیم از چه نوع هایی می تواند باشد. در پست آموزشی قبلی با مقادیر از نوع رشته (String) آشنا شدید اما مسلما انواع داده ای (Data Types) بیشتری وجود دارند. انواع داده ای در زبان های برنامه نویسی مختلف، متفاوت هستند. در ادامه به انواع داده ای در زبان جاوا اسکریپت می پردازیم.

انواع داده ای (Data Types) در جاوا اسکریپت چه هستند؟

در زبان برنامه نویسی جاوا اسکریپت دو نوع داده ای کلی داریم : نوع داده ای اصلی یا مقداری (Primitives/Value Types)، و نوع داده ای ارجاعی (Reference Types). اینکه نوع داده ای مقداری با نوع داده ای ارجاعی چه تفاوتی دارد جزو مباحث پیشرفته تر هست و به آن نمی پردازیم.

هر کدام ازین نوع های داده ای نیز خود شامل موارد مختلفی هستند. انواع داده های اصلی یا مقداری عبارتند از : String, Number, Boolean, undefined, null

انواع داده ای در جاوا اسکریپت
انواع داده ای در جاوا اسکریپت

حالا هر کدام از انواع داده ای اصلی یا مقداری را در عمل با مثال ببینیم:

let name = 'Ali'; //String literal
let age = 31; //Number literal
let isApproved = true; //Boolean literal

چند نکته در مورد نوع داده ای Boolean:

نکته 1: نوع داده ای Boolean می تواند شامل مقدار true یا false باشد.
نکته 2: از این نوع داده ای وقتی استفاده می کنیم که بخواهیم یک منطقی را در کد پیاده سازی کنیم. مثلا اگر سفارش مشتری تایید شد، کالا به آدرس او ارسال شود.
نکته 3: کلمات true و false جزو کلمات کلیدی رزرو شده هستند و نمی توانیم از آن ها برای نامگذاری متغیرها و ثابت ها استفاده کنیم.

در پست قبلی آموختیم که اگر به یک متغیر صریحا (explicitly) مقدار اولیه ای اختصاص ندهیم، مقدار آن به طور ضمنی (implicitly) و پیش فرض برابر با undefined خواهد بود. البته می توانیم صریحا هم به یک متغیر مقدار undefined اختصاص دهیم ولی این کار متداول نیست و توصیه هم نمی شود:

let firstName; //implicit undefined
//or
let firstName = undefined; //explicit undefined

بر خلاف نوع داده ای undefined که اختصاص صریح آن به یک متغیر توصیه نمی شود، نوع داده ای null وجود دارد که باید آن را صریحا به یک متغیر نسبت دهیم:

let lastName = null;

چه موقع از نوع داده ای null استفاده کنیم؟

نکته: از نوع داده ای null وقتی استفاده می کنیم که صریحا (explicitly) بخواهیم مقدار یک متغیر را پاک کنیم.

مثلا فرض کنید می خواهیم فهرستی از رنگ ها را به کاربر نمایش دهیم و کاربر می تواند از بین آن ها یکی یا هیچ کدام را انتخاب کند. رنگ انتخاب شده توسط کاربر را باید در یک متغیر ذخیره کنیم. در صورتیکه کاربر رنگی را انتخاب نکند یا اینکه رنگ انتخاب شده خود را از حالت انتخاب در بیاورد مقدار متغیر مربوط را برابر null قرار می دهیم و در غیر اینصورت آن را برابر رنگ انتخاب شده وی قرار می دهیم:

let selectedColor = 'red';
//if the user cleared his selected color
selectedColor = null

انواع String, Number, Boolean, undefined, null همگی جرو نوع داده ای مقداری هستند. در جاوا اسکریپت نسخه ES6 یک نوع داده ای مقداری جدید به نام Symbol هم اضافه شده است که در آینده به آن خواهم پرداخت.

تعیین نوع داده ای در زمان اجرا (Dynamic Typing)

ویژگی مهمی که زبان جاوا اسکریپت را متمایز می کند آنست که جاوا اسکریپت یک زبان برنامه نویسی پویا (Dynamic) است، یعنی چه؟

به طور کلی زبان های برنامه نویسی از لحاظ شیوه تعیین نوع داده ای متغیرها به دو دسته تقسیم می شوند:

  • استاتیک (Static)
  • پویا (Dynamic)

در زبان های استاتیک مثل جاوا و #C وقتی می خواهیم متغیری را تعریف کنیم حتما باید نوع داده ای آن را هم صریحا مشخص کنیم و نوع داده ای آن متغیر پس از تعریف به هیچ وجه قابل تغییر نخواهد بود. اما در زبان های پویا مثل جاوا اسکریپت و PHP نوع داده ای یک متغیر در زمان تعریف آن متغیر تعیین نمی شود بلکه نوع داده ای آن در زمان اجرا و بر اساس مقدار داده ایکه به آن متغیر اختصاص داده شده است تعیین خواهد شد.

 زبان های برنامه نویسی از لحاظ Type Checking
زبان های برنامه نویسی از لحاظ Type Checking

حالا پویا بودن تعیین نوع داده ای در زبان جاوا اسکریپت را با یک مثال در کد نویسی بررسی می کنیم:

let name = 'Ali';

گفتیم که در این نوع زبان ها، نوع داده ای متغیر از روی مقدارش تعیین می شود. همانطور که می بینیم مقدار اختصاص داده شده به متغیر name از نوع رشته (String) می باشد. در زبان جاوا اسکریپت یک عملگر(Operator) داریم به نام typeof که به کمک آن می توانیم نوع داده ای یک متغیر را در زمان اجرا بفهمیم:

console.log(typeof name);

اگر کنسول رو باز کنید مشاهده می کنید که نوع داده ای String را در خروجی ثبت می کند. حالا مقدار متغیر name را به نوع داده ای دیگری تغییر دهید و یکبار دیگر از آن typeof بگیرید:

name = 1;
console.log(typeof name);

این بار نوع داده ای Number در خروجی نمایش داده خواهد شد. پس:

نکته: در زبان های پویا نوع داده ای یک متغیر در زمان اجرا و براساس آخرین مقداری که به آن اختصاص داده شده است تعیین خواهد شد نه در زمان تعریف متغیر.
نکته: کلمه typeof جزو کلمات کلیدی رزرو شده است و در نامگذاری ها قابل استفاده نیست.

به عنوان مثالی دیگر، از متغیر age که در بالا تعریف کردیم یک typeof بگیرید:

console.log(typeof age);

در کنسول نوع داده ای Number برایتان نمایش داده خواهد شد. حالا مقدار متغیر age را از عدد صحیح 31 به عدد اعشاری 30.1 تغییر دهید و یکبار دیگر از آن typeof بگیرید:

age= 30.1; 
console.log(typeof age);

باز هم نوع داده ای Number در خروجی نمایش داده خواهد شد، پس:

نکته: در جاوا اسکریپت بر خلاف سایر زبان های برنامه نویسی نوع های داده ای جداگانه ای برای اعداد صحیح و اعداد اعشاری نداریم و اعداد همگی از نوع Number هستند.

در ادامه، از سایر متغیرهاییکه در بالا تعریف کرده بودیم هم typeof بگیرید و نوعشان را بررسی کنید:

console.log(typeof isApproved); //Boolean
console.log(typeof firstName); //undefined

همانطور که می بینید متغیر firstName هم مقدارش و هم نوع داده ایش برابر undefined است بنابراین:

نکته: undefined هم یک نوع داده ایست و هم یک مقدار داده ای.

به عنوان مثال آخر مقدار متغیر selectedColor را برابر null قرار داده و از آن یک typeof بگیرید:

selectedColor = null;
console.log(typeof selectedColor);

خواهید دید که Object به عنوان نوع داده ای این متغیر در خروجی نمایش داده خواهد شد. حالا اگر می خواهید بدانید که Object چیست و چه کاربردی دارد پست آموزشی بعدی این فصل را از دست ندهید.


در مقاله بعدی فصل دوم دوره آموزش جاوا اسکریپت برای مبتدی ها، به موضوع زیر خواهیم پرداخت :