انواع داده در جاوا اسکریپت – راهنمای مقدماتی به زبان ساده
در برنامهنویسی، «نوع داده» (Data Type) نوع و رفتار دادهها را تعریف میکند. به عبارت دیگر نوع داده به کامپایلر یا مفسر میگوید که برنامهنویس قصد انجام چه کاری را با یک تکه داده داشته است. اغلب زبانهای برنامهنویسی از نوعهای دادهای اساسی مانند اعداد، مقادیر بولی، رشتهها و غیره پشتیبانی میکنند. جاوا اسکریپت نیز از این قاعده مستثنی نیست. انواع داده در جاوا اسکریپت مشتمل بر هشت دسته به نامهای عدد، اعداد بزرگ (BigInt)، رشته، تهی، تعریفنشده، سمبل و شیء میشود. در این مقاله با این انواع داده در جاوا اسکریپت و شیوه استفاده از آنها آشنا خواهیم شد.
انواع داده در جاوا اسکریپت
انواع داده در جاوا اسکریپت را میتوان به طور کلی به دو دسته تقسیمبندی کرد که شامل انواع داده «ابتدایی» (Primitive) و انواع داده «غیر ابتدایی» (Non-primitive) میشود. برای نمونه «شیء» (Object) یک نوع داده غیر ابتدایی یا پیچیده است ولی باقی انواع داده از نوع ابتدایی هستند.
جاوا اسکریپت یک زبان با نوعبندی پویا است، یعنی نوع متغیرها در زمان اجرا بررسی میشود. در این حالت یک متغیر میتواند هر زمان نوعهای متفاوتی را بپذیرد. به مثال زیر توجه کنید.
1// x is a string
2let x = "Hello, World";
3// x is a number
4x = 100;
5// x is now a boolean
6x = true;
اگر بخواهید نوع داده کنونی یک متغیر را بدانید، باید از عملگر typeof استفاده کنید.
1// x is a string
2let x = "Hello, World";
3console.log(typeof(x));
4// x is a number
5x = 100;
6console.log(typeof(x));
7// x is now a boolean
8x = true;
9console.log(typeof(x));
خروجی
string number boolean
نوع داده عددی در جاوا اسکریپت
نوع داده عددی در جاوا اسکریپت از قالب IEEE-754 برای نمایش اعداد صحیح و همچنین اعداد اعشاری بهره میگیرد. در جاوا اسکریپت میتوان عملیات بسیار زیادی از قبیل جمع، تفریق، تقسیم، ضرب و غیره روی اعداد اجرا کرد. برای اجرای عملیات پیچیدهتر میتوان از عملگرهای ریاضی داخلی جاوا اسکریپت نیز بهره جست. برخی از مثالها در این زمینه به شرح زیر هستند.
1// Using literal declaration
2let n1 = 100;
3let n2 = 456.234;
4// Using the Number() constructor
5let n3 = Number(100);
6// Conversion to integer
7let n4 = Number.parseInt("456.234");
8// Conversion to float
9let n5 = Number.parseFloat("456.234");
10let n6 = Number.parseFloat("1.13e3");
11// Unary conversion to number
12let n7 = +"345";
13console.log(n1);
14console.log(n2);
15console.log(n3);
16console.log(n4);
17console.log(n5);
18console.log(n6);
19console.log(n7);
خروجی کدهای فوق چنین است.
100 456.234 100 456 456.234 1130 345
اعداد صحیح
گزاره زیر یک متغیر ایجاد میکند که شامل یک عدد صحیح است.
1let x = 21;
اگر بخواهیم یک لفظ هشتهشتی (عددی در مبنای 8) ایجاد کنیم باید از پیشوند 0x و سپس دنبالهای از ارقام هشتهشتی (یعنی ارقام 0 تا 7) استفاده کنیم.
1let x = 0o53;
2console.log(x);
خروجی کد فوق چنین است.
43
به طور مشابه اگر بخواهیم لفظهای شانزدهشانزدهی (عدد در مبنای 16) بسازیم، باید ابتدا پیشوند 0x و سپس دنبالهای از ارقام هگزادسیمال (ارقام 0 تا 9 و حروف a تا f) بیاوریم.
1let x = 0x53;
2console.log(x);
خروجی کد فوق چنین است.
83
اعداد اعشاری
گزاره زیر متغیری ایجاد میکند که حاوی یک عدد اعشاری است.
1let x = 324.56;
شما برای ساخت اعداد بسیار بزرگ یا بسیار کوچک میتوانید از نمادگذاری علمی (e) بهره بگیرید.
1let x = 1.13e6;
2console.log(x);
خروجی کد فوق چنین است.
1130000
جاوا اسکریپت مقادیر عددی خاص دیگری نیز ارائه کرده است که به نوع داده عددی (number) تعلق دارند و شامل NaN، Infinity و Infinity– میشود.
نوع داده NaN
NaN اختصاری برای عبارت «عدد نیست» (Not a Number) محسوب میشود و برای اعداد غیر معتبر مورد استفاده قرار میگیرد. برای نمونه اگر رشتهای را بر یک عدد تقسیم کنید، نتیجه بازگشتی NaN خواهد بود.
1console.log("Faradars"/10);
خروجی
NaN
نکته جالب توجه این جا است که NaN معادل هیچ چیزی حتی خودش نیست.
1console.log(NaN == NaN);
2console.log(NaN == ("MakeUseOf"/10));
3console.log(NaN === NaN);
خروجی
false false false
همچنین در صورتی که یک عبارت ریاضی در جایی شامل NaN باشد، نتیجه کل عبارت NaN خواهد شد.
نوع داده Infinity و Infinity–
Infinity و Infinity– به ترتیب معادل مقادیر ریاضیاتی ∞ و ∞– هستند.
نوع داده BigInt در جاوا اسکریپت
BigInt یک نوع داده ابتدایی در جاوا اسکریپت است که با استفاده از آن میتوان اعداد صحیح را با دقت دلخواه نمایش داد. از آنجا که نوع داده عددی نمیتواند مقادیر بزرگتر از 2⁵³-1 یا کمتر از (2⁵³-1)- را نمایش دهد، نوع داده BigInt در چنین مواردی برای نمایش اعداد بسیار بزرگ یا بسیار کوچک مورد استفاده قرار میگیرد.
امکان ایجاد مقدار BigInt با افزودن حرف n به انتهای یک عدد صحیح یا از طریق استفاده از سازنده مربوطه وجود دارد. به مثال زیر توجه کنید.
1let big1 = 78649264972634817648747234872634876243862348763467547n;
2let big2 = BigInt("78649264972634817648747234872634876243862348763467547");
3console.log(big1);
4console.log(big2);
خروجی کد فوق چنین است.
78649264972634817648747234872634876243862348763467547n 78649264972634817648747234872634876243862348763467547n
نوع داده BigInt مدت زیادی نیست که به زبان جاوا اسکریپت اضافه شده است و در حال حاضر از سوی تقریباً همه مرورگرها به جز اینترنت اکسپلورر پشتیبانی میشود.
نوع داده بولی در جاوا اسکریپت
نوع داده بولی (boolean) میتواند دو مقدار درست یا نادرست (True یا False) داشته باشد. مقادیر بولی نتیجه مقایسههای منطقی هستند.
1let x1 = true;
2console.log(x1);
3let x2 = !true;
4console.log(x2);
5let x3 = !!true;
6console.log(x3);
7let x4 = (false && true);
8console.log(x4);
9let x5 = (false || true);
10console.log(x5);
11let x6 = (2 == "2");
12console.log(x6);
13let x7 = (2 === "2");
14console.log(x7);
15let x8 = (null === undefined);
16console.log(x8);
17let x9 = (0 == "");
18console.log(x9);
19let x10 = (100 > 12);
20console.log(x10);
خروجی کدهای فوق به ترتیب چنین هستند.
- true
- false
- true
- false
- true
- true
- false
- false
- true
- true
امکان تبدیل هر نوع داده به نوع بولی با استفاده از تابع ()boolean وجود دارد. به مثال زیر توجه کنید.
1// Strings
2console.log(Boolean(''));
3console.log(Boolean('abc'));
4console.log(Boolean('123'));
5// Numbers
6console.log(Boolean(0));
7console.log(Boolean(1));
8console.log(Boolean(-1));
9console.log(Boolean(NaN));
10console.log(Boolean(Infinity));
11// Others
12console.log(Boolean([1, 2, 3]));
13console.log(Boolean(undefined));
14console.log(Boolean(null));
خروجی کد فوق چنین است.
false true true false true true false true true false false
نوع داده رشتهای در جاوا اسکریپت
در زمینه برنامهنویسی، رشته به دنبالهای از صفر یا چند کاراکتر گفته میشود. رشتهها در جاوا اسکریپت «تغییرناپذیر» (immutable) هستند و به طور عمده برای نمایش دادههای متنی مورد استفاده قرار میگیرند. اندیسگذاری رشتهها از 0 آغاز میشود، یعنی نخستین آیتم در رشته دارای اندیس صفر است، دومی دارای اندیس 1 است و همین طور تا آخر ادامه مییابد.
رشتهها باید درون گیومه قرار گرفته باشند. امکان استفاده از گیومه تکی (‘)، گیومه جفتی (“) یا بکتیک (') برای ساخت رشته در جاوا اسکریپت وجود دارد. گیومههای تکی و جفتی به لحاظ عملی تفاوتی با هم ندارند، اما رشتهای که با یک گیومه جفتی باز میشود، باید با همان نوع بسته شود. همین قاعده در مورد گیومه تکی نیز برقرار است.
1let str1 = "Hi";
2let str2 = 'Hi';
3let str3 = "How're you?";
4// Using \ to escape the single quote (')
5let str4 = 'How\'re you?';
بکتیکها در واقع «لفظهای قالبی» (Template Literals) هستند که برخی کارکردهای بسطیافته را در اختیار ما قرار میدهند. به این ترتیب میتوانید متغیرهای جاسازیشده، عبارتها و حتی فراخوانی توابع را داخل رشتهها بیاورید.
1// Embedding variable within a string
2let x = "Hello";
3let str1 = `${x}, How're you?`;
4console.log(str1);
5// Embedding expression within a string
6let str2 = `Sum of 20 + 30 is: ${20 + 30}`;
7console.log(str2);
8// Embedding function call within a string
9function calculateSum(a, b) {
10return a + b;
11}
12let str3 = `Sum of 20 + 30 is: ${calculateSum(20, 30)}`;
13console.log(str3);
خروجی کد فوق چنین است.
Hello، How're you? Sum of 20 + 30 is: 50 Sum of 20 + 30 is: 50
نوع داده null در جاوا اسکریپت
نوع داده تهی یا Null تنها یک مقدار دارد و آن هم null است. این نوع داده در واقع به آن معنی است که متغیر عامدانه فاقد مقدار است.
1let n = null;
بسیاری از برنامهنویسان بین نوعهای «تهی» (Null) و «تعریف نشده» (Undefined) دچار سردرگمی میشوند. برای درک بهتر تفاوت این دو نوع داده پیشنهاد میکنیم، مطلب زیر را مطالعه کنید.
نوع داده Undefined در جاوا اسکریپت
نوع «تعریفنشده» یا Undefined یک نوع داده خاص است که نشان میدهد، هنوز مقداری به یک متغیر انتساب نیافته است. زمانی که یک متغیر اعلان شود، اما هنوز مقداردهی نشده باشد، یک مقدار از نوع Undefined به آن انتساب داده میشود.
1let x;
2console.log(typeof(x));
خروجی کد فوق چین است.
Undefined
شما میتوانید به طور صریح یک مقدار undefined را به یک متغیر انتساب دهید، اما انجام این کار به هیچ وجه توصیه نمیشود.
نوع داده Symbol در جاوا اسکریپت
سمبل یک مقدار ابتدایی یکتا و تغییرناپذیر است. این نوع داده به طور عمده برای ایجاد شناسههای منحصر به فرد برای اشیا مورد استفاده قرار میگیرد. امکان ساخت سمبل با استفاده از تابع ()Symbol وجود دارد. همچنین یک توصیف اختیاری نیز میگیرد، اما این کار صرفاً به منظور دیباگ کردن انجام مییابد.
1let sym1 = Symbol();
2let sym2 = Symbol("data");
تابع ()Symbol هر بار که فراخوانی شود، یک مقدار یکتای جدید میسازد. به این ترتیب حتی در صورتی که سمبلی با توصیف مشابه بسازید، مقادیر آن متفاوت خواهد بود.
1console.log(Symbol() == Symbol());
2console.log(Symbol("data") == Symbol("data"));
خروجی کد فوق چنین است.
false false
نوع داده Object در جاوا اسکریپت
اشیا در جاوا اسکریپت به مجموعههایی از جفتهای «کلید-مقدار» گفته میشود که در آنها کلید، یک رشته و مقدار میتواند هر نوع دادهای باشد. امکان ایجاد یک شیء خالی در جاوا اسکریپت با استفاده از ساختار «سازنده شیء» (Object Constructor) یا با استفاده از ساختار «لفظ شیئی» وجود دارد. در ادامه مثالی از هر دو حالت را مشاهده میکنید.
1let obj1 = new Object();
2let obj2 = {};
هر شیء شامل یک لیست اختیاری از مشخصهها است که در آن هر مشخصه یک جفت «کلید-مقدار» است. امکان دسترسی به مقدار درون شیء با استفاده از نمادگذاری نقطه یا نمادگذاری شبیه آرایه یعنی استفاده از براکت ([]) وجود دارد.
1let obj = {
2"key1" : "value1",
3"key2" : "value2"
4}
5console.log(obj.key1);
6console.log(obj["key2"]);
خروجی کدهای فوق چنین است.
value1 value2
سخن پایانی
جاوا اسکریپت یکی از پرکاربردترین زبانهای برنامهنویسی دنیا است. با استفاده از جاوا اسکریپت میتوان وبسایت، وباپلیکیشن، اپلیکیشنهای سرور، بازی، اپلیکیشنهای موبایل و بسیاری چیزهای دیگر ساخت.
به طور خلاصه شما با استفاده از زبان جاوا اسکریپت هر کاری که دلتان بخواهد میتوانید انجام دهید. در این مطلب تلاش کردیم شما را با انواع داده در جاوا اسکریپت آشنا کرده و مثالهایی عملی در مورد شیوه استفاده از هر کدام ارائه کنیم.