Sokan Academy

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

در قسمت قبل، متغیرها را تعریف کردیم و به آن‌ها مقدار دادیم. گفتیم متغیر در واقع یک ظرف برای نگه‌داری مقادیر است. در این قسمت می‌خواهیم بررسی کنیم که داده چیست، چه کاربردی دارد و چه انواعی برای آن وجود دارد. به‌طور کلی می‌توان داده‌ها را به دو دسته تقسیم کرد:

  • داده‌های پریمیتیو (Primitive)
  • داده‌های نان‌پریمیتیو (Non-Primitive)

دسته‌بندی داده‌ها

داده‌های Primitive

داده‌های Primitive داده‌هایی هستند که مستقیماً یک مقدار اولیه را نگه‌داری می‌کنند و تغییرناپذیر (Immutable)  هستند. برای مثال، تصور کنید متغیری به نام myData داریم:

var myData = 2;

این مقدار ۲ همیشه به عنوان عدد دو شناخته می‌شود. حال اگر مقدار این متغیر را تغییر دهیم:

var myData = 2;
myData = 3;
console.log(myData);

این تغییر به این معنا نیست که عدد «۲» تبدیل به «۳» شده است؛ بلکه مقدار ۲ از داخل متغیر حذف شده و مقدار ۳ جایگزین آن شده است. اگر از متغیر لاگ بگیریم:

مثال دیگر اگر متغیر دیگری داشته باشیم:

var myData = 2;
myData = 3;
console.log(myData);
var myData2 = 5;

و مقدار آن را به متغیر قبلی نسبت دهیم:

myData = myData2;

در این صورت مقدار ۵ جایگزین مقدار قبلی متغیر myData  می‌شود.

داده‌های Non Primitive

برخلاف داده‌های پریمیتیو، داده‌های نان‌پریمیتیو تغییرپذیر (Mutable) هستند. مواردی که درباره داده‌های پریمیتیو گفتیم (مثل تغییرناپذیری)، در اینجا صدق نمی‌کند. این نوع داده‌ها معمولاً به‌صورت مجموعه‌ای از داده‌های پریمیتیو تعریف می‌شوند، مانند:

  • آرایه‌ها (Array)
  • آبجکت‌ها (Object)
  • توابع (Function)

و می‌توان مقادیر داخلی آن‌ها را بدون ایجاد یک مقدار جدید، به‌روزرسانی یا تغییر داد. برای درک بهتر داده‌های نان‌پریمیتیو، یک مثال ساده با یک لیست (آرایه) بررسی می‌کنیم. فرض کنید یک متغیر داریم به نام  myLis  و داخل آن چند مقدار عددی قرار می‌دهیم:


var myList = [1, 2, 3, 4];

ما میتوانیم رقم اخر این لیست رو حذف کنیم.


var myList = [1, 2, 3, 4];
myList.pop();
console.log(myList);

نتیجه می‌شود:

قبلاً مقدار [1, 2, 3, 4] داشتیم، اما پس از حذف عنصر آخر، لیست به [1, 2, 3] تبدیل شد. این دقیقاً نشان می‌دهد که لیست‌ها قابل تغییر هستند و می‌توانیم ساختار داخلی آن‌ها را دستکاری کنیم.

اگر یک متغیر جدید تعریف کنیم:

var myList2 = myList;

در این حالت، myList2  دقیقاً به همان لیست قبلی اشاره می‌کند و یک نسخه جدید ساخته نمی‌شود. بنابراین هر تغییری روی یکی از آن‌ها انجام دهید، روی دیگری هم دیده می‌شود.

فرض کنید کد زیر را نوشته‌ایم:

var myList = [1, 2, 3, 4];
var myList2 = myList;
console.log(myList2);
// myList.pop();
// console.log(myList);

حال اگر قبل از هر تغییری مقدار myList2 را چاپ کنیم خروجی خواهد بود:

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

var myList = [1, 2, 3, 4];
var myList2 = myList;
console.log(myList2);
myList.pop();
console.log(myList);

نتیجه:

در داده‌های نان‌پریمیتیو (مانند آرایه‌ها) وقتی یک متغیر را به متغیر دیگری نسبت می‌دهیم هر دو متغیر به یک رفرنس (یک محل ذخیره‌سازی مشترک) اشاره می‌کنند بنابراین، هر تغییری روی myList انجام شود، در myList2 هم دیده می‌شود.

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

در جاوااسکریپت می‌توانیم بخش‌هایی از کد را به صورت توضیحی بنویسیم یا اجرای آن‌ها را موقتاً غیرفعال کنیم. این توضیحات یا خطوط غیرفعال‌شده، کامنت نام دارند و توسط مفسر اجرا نمی‌شوند. دو نوع کامنت داریم:

کامنت تک‌خطی

در ابتدای خط دو اسلش می‌گذاریم:
// این یک کامنت تک‌خطی است خط پس از // دیگر اجرا نمی‌شود.

کامنت چندخطی

برای کامنت کردن چند خط پشت سر هم /* این یک کامنت چندخطی است که در چند خط نوشته می‌شود*/
از کامنت‌ها می‌توانیم برای غیرفعال کردن موقت کد استفاده کنیم؛
مثلاً زمانی که نمی‌خواهیم یک دستور اجرا شود:

// console.log(myList);

انواع داده‌های Primitive

داده‌های پریمیتیو در جاوااسکریپت چندین زیرمجموعه دارند که چهار نوع اصلی و پرکاربرد آن عبارت‌اند از:

داده String

حالا برگردیم به ادامه‌ی بحث و درباره نوع داده String  صحبت کنیم. String به مجموعه‌ای از کاراکترها گفته می‌شود. کاراکتر می‌تواند شامل موارد زیر باشد:

  • حروف الفبا
  • اعداد
  • کاراکترهای خاص مانند: _ ، # ، @ و …

برای اینکه یک مقدار به عنوان رشته شناخته شود، باید آن را داخل کوتیشن قرار دهیم؛ می‌توان از تک کوتیشن (' ') یا دبل کوتیشن (" ") استفاده کرد. مثال:

1 var myString = 'sokan';
2 var myStr = "123Sokan@";

در اینجا مقدار داخل دبل کوتیشن به عنوان یک رشته شناخته می‌شود. اگر این دو متغیر را لاگ کنیم:

نتیجه داده String
خروجی نشان می‌دهد که هر دو به عنوان رشته (String) شناخته می‌شوند.

داده Number 

برای ساخت داده عددی کافی است مقدار را بدون کوتیشن قرار دهیم:

var myNum = 45;

جاوااسکریپت این مقدار را به‌طور خودکار عدد (Number) در نظر می‌گیرد.

داده Boolean

داده‌های بولین برای نمایش حالت‌های منطقی استفاده می‌شوند؛ حالت‌هایی مانند درست/غلط، بودن/نبودن، فعال/غیرفعال.

این نوع داده فقط دو مقدار ممکن دارد:

  • true
  • fals

مثال:

let myBoolean = true;

یا:

let myBoolean = false;

داده Undefined 

از قسمت قبل یادمان هست که اگر یک متغیر تعریف شود اما مقداردهی نشود، مقدار آن undefined خواهد بود. مثلاً:

var myVar;
console.log(myVar);

خروجی:

این مقدار نشان می‌دهد که متغیر تعریف شده اما هنوز مقداری برای آن تعیین نشده است. به علاوه، undefined  خودش یک نوع داده مستقل محسوب می‌شود.

نتیجه داده Undefined

عملگر Typeof

تا اینجا با انواع داده‌ها به صورت کلی آشنا شدیم. اما یک سؤال مهم وجود دارد چطور بفهمیم یک متغیر دقیقاً چه نوع داده‌ای در خود نگه داشته است؟ برای این کار در جاوااسکریپت یک اپراتور وجود دارد به نام typeof اگر این اپراتور را قبل از نام متغیر قرار دهیم، خروجی آن نوع داده‌ای است که آن متغیر در خود نگه داشته.
مثال:

var x = "10" + "reshte";

console.log(typeof x);

خروجی:

نتیجه عملگر Typeof

 همان‌طور که انتظار داشتیم، مشخص می‌کند که مقدار ذخیره‌شده یک رشته است.

انواع مختلف داده عددی (Number)

گفتیم که داده‌های عددی یکی از انواع پریمیتی هستند، اما خود عددها شکل‌های مختلفی دارند.

اعداد صحیح (Integer)

اعدادی که اعشار ندارند:

var myInt = 34;

به این دسته معمولاً Integers  گفته می‌شود.

اعداد اعشاری (Float)

اعدادی که دارای بخش اعشاری هستند:

var myInt = 34.35;

نمایش علمی اعداد (Scientific Notation)

در جاوااسکریپت می‌توان اعداد بسیار بزرگ یا بسیار کوچک را با روش علمی نوشت. مثلاً:

var mySci = 2e5;

اگر آن را لاگ کنیم:

نتیجه نمایش علمی اعداد

یعنی 2 به اضافه ۵ تا صفر (چون بعد از e عدد ۵ آمده است.)

مقدار Infinity و -Infinity

اگر یک مقدار عددی داشته باشیم که حاصل آن به سمت بی‌نهایت برود، جاوااسکریپت مقدار Infinity  را برمی‌گرداند. مثال:


var myNum = 2 / 0;

نتیجه می‌شود:

 نکات مهم:

  • Infinity خودش یک نوع عدد (number) است.
  • نسخه منفی آن هم وجود دارد: -Infinity

بنابراین Infinity و -Infinity هر دو عدد محسوب می‌شوند.

اعداد غیر مبنای ده (Non-decimal Numbers)

تا اینجا تمام مثال‌هایی که زدیم اعداد در مبنای ۱۰ (دسیمال) بودند. اما در جاوااسکریپت می‌توان اعداد را در مبناهای دیگر نیز نوشت. اعداد هگزادسیمال معمولاً با 0x شروع می‌شوند:

var myNum = 0xff;

خروجی:

هرچند مقدار را به‌صورت هگزادسیمال نوشته‌ایم، جاوااسکریپت همیشه خروجی را به شکل دسیمال (مبنای ۱۰) برمی‌گرداند.

تبدیل اعداد به نمایش رشته‌ای (String Representation)

گاهی نیاز داریم عدد را به صورت رشته نمایش دهیم. مثلاً:

  • برای لاگ مناسب
  • برای نمایش رنگ‌ها
  • یا برای جلوگیری از تبدیل خودکار به مبنای ده

یک راه ساده این است که عدد را داخل کوتیشن بنویسیم:

var myNum = "45";

در این حالت:

  • نوع داده: string
  • محتوا: عدد 45 (اما به صورت رشته)

این همان چیزی است که از آن به عنوان نمایش رشته‌ای عدد یاد می‌کنیم.

برای اینکه بتونیم این اعداد ببریم برای نمایش رشته‌ای هم متوانیم داخل کوتیشن قرار بدیم هم به صورت دستی این کار را انجام بدیم مثال:

 ما در بالا یک متغییر عددی داریم 

var myInt = 34;
var myFloat = 34.35;
var mySci = 2e-5;
var myNum = "45";
console.log(myInt.toString());

نتیجه می‌شود:

در ادامه روش‌های حرفه‌ای‌تر تبدیل عدد به رشته را هم می‌توان توضیح داد، اما فعلاً همین مقدار برای درک اولیه کافی است.

جمع‌بندی

در این قسمت، پس از معرفی مفهوم دسته‌بندی فوق، به معرفی ۴ مورد از انواع داده‌های Primitive پرداخته شده است. پس از آن، نوع داده‌های number مورد بررسی بیشتر قرار گرفته است. در جاوااسکریپت، تمام انواع اعداد، زیرمجموعه داده number قرار دارند؛ مواردی نظیر: اعداد صحیح، اعداد اعشاری، اعداد با مبنای غیر ۱۰، نمایش علمی اعداد، اعداد بی‌نهایت و مقدار NaN. تمام این موارد در این قسمت مورد بررسی قرار گرفته‌اند؛ به‌جز مقدار NaN که برای جلوگیری از طولانی شدن قسمت توضیح داده نشده و در قالب عکس زیر می‌توانید با این مقدار نیز آشنا شوید.

ES6آموزش جاوااسکریپتjsjavascriptجاوا اسکریپت

sokan-academy-footer-logo
کلیه حقوق مادی و معنوی این وب‌سایت متعلق به سکان آکادمی می باشد.