در قسمت قبل، به آموزش متغیرها در جاوا اسکریپت پرداختیم و گفتیم متغیر در واقع یک ظرف برای نگهداری داده است. حال در این قسمت، میخواهیم به آموزش انواع داده در جاوا اسکریپت بپردازیم.
بهطور کلی میتوان دادهها را به دو دسته کلی تقسیم کرد:
- دادههای Primitive (پریمیتیو)
- دادههای Non Primitive (نانپریمیتیو)

دادههای Primitive
دادههای Primitive دادههایی هستند که مستقیماً یک مقدار اولیه را نگهداری میکنند و تغییرناپذیر (Immutable) هستند. برای مثال، تصور کنید متغیری به نام myData داریم:
var myData = 2;این مقدار ۲ همیشه به عنوان عدد دو شناخته میشود. حال اگر مقدار این متغیر را تغییر دهیم:
var myData = 2;
myData = 3;
console.log(myData);این تغییر به این معنا نیست که عدد «۲» تبدیل به «۳» شده است؛ بلکه مقدار ۲ از داخل متغیر حذف شده و مقدار ۳ جایگزین آن شده است. اگر از متغیر لاگ بگیریم:

مثال دیگر اگر متغیر دیگری داشته باشیم با نام myData2:
var myData = 2;
myData = 3;
console.log(myData);
var myData2 = 5;و مقدار آن را به متغیر قبلی نسبت دهیم:
myData = myData2;
console.log(myData);در این صورت مقدار ۵ جایگزین مقدار قبلی متغیر myData میشود:

دادههای primitive شامل موارد زیر میشوند:
- اعداد (Number)
- رشته (String)
- بولین (Boolean)
- تعریف نشده (undefined)
که در ادامه به معرفی و آموزش عمیقتر آنها میپردازیم.
دادههای Non Primitive
برخلاف دادههای Primitive، دادههای Non Primitive، تغییرپذیر (Mutable) هستند. مواردی که درباره دادههای پریمیتیو گفتیم (مثل تغییرناپذیری)، در اینجا صدق نمیکند. این نوع دادهها معمولاً بهصورت مجموعهای از دادههای Primitive در جاوا اسکریپت تعریف میشوند و میتوان مقادیر داخلی آنها را بدون ایجاد یک مقدار جدید، بهروزرسانی یا تغییر داد، مانند:
- آرایهها (Array)
- آبجکتها (Object)
- توابع (Function)
برای درک بهتر دادههای Non Primitive، یک مثال ساده با یک آرایه (در قسمت آموزش آرایه در جاوا اسکریپت با این مفهوم آشنا خواهید شد) بررسی میکنیم. فرض کنید یک متغیر داریم به نام myList و داخل آن چند مقدار عددی قرار میدهیم:
var myList = [1, 2, 3, 4];ما میتوانیم رقم آخر این لیست را با متدی به نام ()pop حذف کنیم (با این متد در قسمتهای بعدی آشنا خواهید شد):
var myList = [1, 2, 3, 4];
myList.pop();
console.log(myList);نتیجه میشود:

قبلاً مقدار [4 ,3 ,2 ,1] داشتیم، اما پس از حذف عنصر آخر، لیست به [3 ,2 ,1] تبدیل شد. این دقیقاً نشان میدهد که آرایهها قابل تغییر هستند و میتوانیم ساختار داخلی آنها را دستکاری کنیم.
اگر یک متغیر جدید تعریف کنیم:
var myList2 = myList;در این حالت، myList2 دقیقاً به همان لیست قبلی اشاره میکند و یک نسخه جدید ساخته نمیشود:
var myList = [1, 2, 3, 4];
var myList2 = myList;
console.log(myList2);حال اگر قبل از هر تغییری مقدار myList2 را چاپ کنیم خروجی خواهد بود:

این همان مقدار اولیه لیست اصلی است اکنون دستور حذف آخرین مقدار لیست را اجرا و سپس دوباره مقدار myList2 را لاگ میگیریم:
var myList = [1, 2, 3, 4];
var myList2 = myList;
console.log(myList2);
myList.pop();
console.log(myList2);نتیجه:

بنابراین در دادههای نانپریمیتیو (مانند آرایهها) وقتی یک متغیر را به متغیر دیگری نسبت میدهیم هر دو متغیر به یک رفرنس (یک محل ذخیرهسازی مشترک) اشاره میکنند؛ پس هر تغییری روی myList انجام شود، در myList2 هم دیده میشود.
کامنتها در جاوا اسکریپت
در جاوااسکریپت میتوانیم بخشهایی از کد را به صورت توضیحی بنویسیم یا اجرای آنها را موقتاً غیرفعال کنیم. این توضیحات یا خطوط غیرفعالشده، کامنت نام دارند و توسط مفسر اجرا نمیشوند. دو نوع کامنت داریم:
۱. کامنت تکخطی: در ابتدای خط دو اسلش میگذاریم:
//این یک کامنت تکخطی است. این خط پس از//دیگر اجرا نمیشود.۲. کامنت چندخطی: برای کامنت کردن چند خط پشت سر هم:
/*این یک کامنت چندخطی استکه در چند خط نوشته میشود
*/از کامنتها میتوانیم برای غیرفعال کردن موقت کد استفاده کنیم؛
مثلاً زمانی که نمیخواهیم یک دستور اجرا شود:// console.log(myList);
انواع داده Primitive
دادههای Primitive در جاوا اسکریپت چندین زیرمجموعه دارند که چهار نوع اصلی و پرکاربرد آن عبارتاند از:
۱. داده String یا رشته
String به مجموعهای از کاراکترها گفته میشود. کاراکتر میتواند شامل موارد زیر باشد:
- حروف الفبا
- اعداد
- کاراکترهای خاص مانند: _ ، # ، @ و …
برای اینکه یک مقدار به عنوان رشته شناخته شود، باید آن را داخل کوتیشن قرار دهیم؛ میتوان از تک کوتیشن (' ') یا دبل کوتیشن (" ") استفاده کرد. مثال:
var myString = 'sokan';
var myStr = "123Sokan@";
console.log(myStr);
console.log(myString);در اینجا مقدار داخل کوتیشن یا دبل کوتیشن به عنوان یک رشته شناخته میشود. اگر این دو متغیر را لاگ کنیم:

خروجی نشان میدهد که هر دو به عنوان رشته (String) شناخته میشوند.
۲. داده Number
برای ساخت داده عددی کافی است مقدار را بدون کوتیشن قرار دهیم:
var myNum = 45;جاوااسکریپت این مقدار را بهطور خودکار عدد (Number) در نظر میگیرد. انواع مختلف داده عددی را در ادامه آموزش میبینید.
۳. داده Boolean
دادههای بولین برای نمایش حالتهای منطقی استفاده میشوند؛ حالتهایی مانند درست/غلط، بودن/نبودن، فعال/غیرفعال.
این نوع داده فقط دو مقدار ممکن دارد:
- true
- fals
مثال:
let myBoolean = true;یا:
let myBoolean = false;۴. داده Undefined
از قسمت قبل یادمان هست که اگر یک متغیر تعریف شود اما مقداردهی نشود، مقدار آن undefined خواهد بود. مثلاً:
var myVar;
console.log(myVar);خروجی:

این مقدار نشان میدهد که متغیر تعریف شده اما هنوز مقداری برای آن تعیین نشده است. به علاوه، undefined خودش یک نوع داده مستقل محسوب میشود و بیانگر این است که هنوز مقداری تعریف نشده است.
عملگر Typeof برای تشخیص نوع داده در جاوا اسکریپت
تا اینجا با انواع دادهها به صورت کلی آشنا شدیم. اما یک سؤال مهم وجود دارد چطور بفهمیم یک متغیر دقیقاً چه نوع دادهای در خود نگه داشته است؟ برای این کار در جاوا اسکریپت یک اپراتور وجود دارد به نام typeof اگر این اپراتور را قبل از نام متغیر قرار دهیم، خروجی آن نوع دادهای است که آن متغیر در خود نگه داشته است.
مثال:
var x = "10" + "reshte";
console.log(typeof x);خروجی:

همانطور که انتظار داشتیم، مشخص میکند که مقدار ذخیرهشده یک رشته است.
انواع مختلف داده عددی (Number)
گفتیم که دادههای عددی یکی از انواع پریمیتی هستند، اما خود عددها شکلهای مختلفی دارند.
۱. اعداد صحیح (Integer)
اعدادی که اعشار ندارند:
var myInt = 34;به این دسته اعداد، Integers گفته میشود.
۲. اعداد اعشاری (Float)
اعدادی که دارای بخش اعشاری هستند:
var myFloat = 34.35;۳. نمایش علمی اعداد (Scientific Notation)
در جاوا اسکریپت میتوان اعداد بسیار بزرگ یا بسیار کوچک را با روش علمی نوشت. مثلاً:
var mySci = 2e5;اگر آن را لاگ کنیم، مقدار 200000 را نمایش میدهد؛ یعنی 2 به اضافه ۵ تا صفر (چون بعد از e عدد ۵ آمده است).
۴. مقدار Infinity و Infinity-
اگر یک مقدار عددی داشته باشیم که حاصل آن به سمت بینهایت برود، جاوااسکریپت مقدار Infinity را برمیگرداند. مثال:
var myNum = 2 / 0;نتیجه میشود:

نکات مهم:
- Infinity خودش یک نوع عدد (number) است.
- نسخه منفی آن هم وجود دارد: Infinity-
بنابراین Infinity و Infinity- هر دو عدد محسوب میشوند.
۵. اعداد غیر مبنای ده (Non-decimal Numbers)
تا اینجا تمام مثالهایی که زدیم اعداد در مبنای ۱۰ (دسیمال) بودند. اما در جاوا اسکریپت میتوان اعداد را در مبناهای دیگر نیز نوشت. اعداد هگزادسیمال معمولاً با 0x شروع میشوند:
var myNum = 0xff;لاگ این مقدار در کنسول، مقدار 255 را خروجی میدهد (مقدار دسیمال آن را). یعنی هرچند مقدار را بهصورت هگزادسیمال نوشتهایم، جاوا اسکریپت همیشه خروجی را به شکل دسیمال (مبنای ۱۰) برمیگرداند. برای حل این مسئله، به نمایش رشتهای اعداد نیاز داریم.
تبدیل اعداد به نمایش رشتهای با استفاده از متد toString
گاهی نیاز داریم عدد را به صورت رشته نمایش دهیم. مثلاً:
- برای لاگ مناسب
- برای نمایش رنگها
- یا برای جلوگیری از تبدیل خودکار به مبنای ده
یک راه ساده این است که عدد را داخل کوتیشن بنویسیم:
var myNum = "45";در این حالت:
- نوع داده: string
- محتوا: عدد 45 (اما به صورت رشته)
این همان چیزی است که از آن به عنوان نمایش رشتهای عدد یاد میکنیم.
برای اینکه بتونیم این اعداد ببریم برای نمایش رشتهای هم میتوانیم داخل کوتیشن قرار بدیم هم از متد toString استفاده کنیم. مثال:
ما در بالا یک متغییر عددی داریم :
var myInt = 34;
console.log(myInt.toString()); // خروجی: 34
console.log(typeof myInt.toString()); // خروجی: stringدر ادامه روشهای حرفهایتر تبدیل عدد به رشته را هم میتوان توضیح داد، اما فعلاً همین مقدار برای درک اولیه کافی است.
تمرین انواع داده در جاوا اسکریپت
تمرین این قسمت از آموزش جاوا اسکریپت به صورت زیر است:
- متغیری بسازید، مقدار 0.2 و 0.1 را داخل آن جمع کنید و نتیجه را در کنسول لاگ بگیرید؛
- متغیر دیگری بسازید و مقدار آن را برابر با 9999999999999999 (۱۶ تا ۹) قرار دهید و نتیجه را در کنسول مشاهده کنید؛
- نتایج با چیزی که در کنسول خواهید دید، متفاوت خواهد بود و دلیل آن دقت اعداد در جاوا اسکرپت است!
- با سرچ کردن در مورد دقت اعداد در جاوا اسکریپت (Integer precision in JavaScript)، جواب را بیابید.
- بهترین پاسخ را میتوانید در سایت https://developer.mozilla.org پیدا کنید.
جمعبندی
در این قسمت، پس از آشنایی با دو نوع اصلی داده در جاوا اسکریپت یعنی Primitive و Non Primitive؛ ۴ مورد از انواع دادههای Primitive را به خوبی آموزش دیدید و پس از آن، با نوع دادههای number عمیقتر آشنا شدید.
یاد گرفتید که در جاوا اسکریپت، تمام انواع اعداد، زیرمجموعه داده number قرار دارند؛ مواردی نظیر: اعداد صحیح، اعداد اعشاری، اعداد با مبنای غیر ۱۰، نمایش علمی اعداد، اعداد بینهایت و مقدار NaN. تمام این موارد در این قسمت مورد بررسی قرار گرفتهاند؛ بهجز مقدار NaN که در قسمتهای دیگر از دوره آموزش جاوا اسکریپت، با آن آشنا خواهید شد.
