هر مقداری توی زبانهای برنامهنویسی یک نوع خاصی داره. برای مثال ما میتونیم توی همه زبانهای برنامهنویسی عدد و رشته داشته باشیم. توی این کد:
const message = "Learning JS!";
مقداری که متغیر message داره از نوع رشته هست. بنابراین جاوااسکریپت با این متغیر مثل یک رشته رفتار میکنه. هر مقداری که تعریف میکنیم، یک ویژگی داره به اسم نوع دادهای. وقتی جاوااسکریپت میخواد کدهای ما رو اجرا کنه، نوع دادهای به جاوااسکریپت میگه که هدف ما از تعریف کردن این مقدار چیه و به چه صورت باید با اون رفتار کنه. توی مثال زیر به جاوااسکریپت میگیم که با متغیر x مثل یک عدد رفتار کن:
const x = 10;
بنابراین وقتی این متغیر رو با نوع عددی تعریف کردیم، به جاوااسکریپت گفتیم که با اون مثل یک عدد رفتار کنه تا بتونیم همه عملیاتی که مربوط به اعداد هست (مثل جمع، ضرب و ...) رو در اختیار داشته باشیم.
اگه این متغیر رو از نوع رشته تعریف میکردیم، جاوااسکریپت با اون مثل یک رشته رفتار میکرد:
const x = "10";
alert(x + 10); // 1010
پس هر مقداری توی جاوااسکریپت یک نوع داره. ما توی جاوااسکریپت علاوه بر نوعهای عدد و رشته، نوعهای مختلف دیگهای هم داریم که توی ادامه با اونها آشنا میشیم.
نکته: ما توی این قسمت با این نوعهای دادهای آشنا میشیم. برای مثال میخوایم بدونیم نوع دادهای آبجکت چیه. اما اینکه آبجکت چیه و چه ویژگیهایی داره رو توی قسمتهای بعدی به طور مفصل بررسی میکنیم.
اعدادی که توی جاوااسکریپت داریم (چه صحیح و چه اعشاری) از نوع دادهای Number هستن:
const x = 10;
const y = 10.5;
هر دو متغیر بالا از نوع دادهای عدد هستن و عملیات ریاضی مثل ضرب و جمع برای اونها امکانپذیر هست. علاوه بر اعدادی که ما خودمون تعریف میکنیم، توی جاوااسکریپت چند نوع عددی مخصوص وجود داره: Infinity و NaN
نوع دادهای رشته یا String برای نگهداری و کار با متنها استفاده میشه. مقدارهایی که بین علامتهای " یا ' و ` قرار میگیرن، به عنوان رشته در نظر گرفته میشن:
به مقدارهای true و false میگیم بولیَن. کاربرد اونها برای پیادهسازی کردن مفهوم درست/غلط بودن و یا بله/خیر بودن یک عبارت یا مقدار هست. ما به متغیرهای زیر مقدارهای true و false دادیم:
let user_logged_in = false;
const learning_javascript = true;
اسم متغیر اول رو user_logged_in گذاشتیم و به اون مقدار false دادیم تا این مفهوم رو پیادهسازی کنیم که کاربر لاگین نکرده.
خروجی عملگرهای مقایسهای که توی قسمتهای بعدی با اونها آشنا میشیم یک مقدار بولین هست:
آبجکتها برای نگهداری مجموعهای از اطلاعات استفاده میشن. همه نوعهای دادهای به غیر از آبجکت مثل رشتهها و اعداد، فقط میتونن شامل یک مقدار باشن. اما آبجکت میتونه شامل چند مقدار دیگه باشه:
سیمبلها ارتباط زیادی با آبجکتها دارن و کاربرد اونها به اندازه بقیه نوعهای داده نیست. اما چیزی که اینجا میتونیم به اونها اشاره کنیم اینه که هر سیمبل یک مقدار کاملاً یکتا هست و معمولاً برای زمانی استفاده میشه که میخوایم آبجکتی با کلیدهای یکتا (Unique) داشته باشیم:
بیگاینت یک نوع دادهای جدید مرتبط به اعداد توی جاوااسکریپت هست و زمانی از اون استفاده میکنیم که با عددهای بسیار بزرگ سر و کار داریم. منظور از اعداد بزرگ، اعدادی خارج از محدوده ±9007199254740991 یا ±(2^53 - 1) هست. یک عدد بیگاینت با اضافه کردن حرف n به آخر یک عددِ عادی درست میشه:
const x = 1n;
این همون عدد 1 هست اما از نوع بیگاینت.
یک عدد بیگاینت نمیتونه همراه با یک عدد معمولی توی یک محاسبات عددی حضور داشته باشه که در این صورت خطا میگیریم:
alert(1n + 2);
// TypeError: can't convert BigInt to number
عدد 9,007,199,254,740,991 بزرگترین عددی هست که توی جاوااسکریپت میتونیم با خیال راحت با اون محاسبات عددی انجام بدیم. این عدد به صورت زیر قابل دسترس هست:
این مقدار شباهت زیادی به نال داره و زمانی اون رو میگیریم که دنبال مقداری هستیم که وجود نداره. برای مثال متغیری که بدون مقدار پیادهسازی بشه، مقدار اون undefined در نظر گرفته میشه:
حالا که با ۸ نوع دادهای اصلی توی جاوااسکریپت آشنا شدیم، میخوایم ببینیم چطوری میتونیم نوع یک مقدار رو تشخیص بدیم. توی جاوااسکریپت ما با استفاده از یک عملگر به اسم typeof میتونیم نوع یک مقدار رو تشخیص بدیم. ما از typeof به صورت زیر استفاده میکنیم:
typeof "Hello"; // string
// or
typeof(10); // number
خروجی این عملگر یک رشته هست و به ما میگه مقدار مد نظر ما از چه نوعی هست:
همونطور که توی خط ۱۰ میبینیم، typeof null برابر با آبجکت هست. توی اکثر زبانهای برنامهنویسی که از نوع دادهای Null پشتیبانی میکنن، نوع Null واقعاً null هست که این موضوع توی جاوااسکریپت یک عیب به حساب میاد و چون این موضوع از همون روزهای ابتدایی پیدایش این زبان وجود داشته، برای حفظ سازگاری کدهایی که با جاوااسکریپت نوشته شدن، این موضوع پایدار مونده و برطرف نشده. اما خب برای بررسی نال بودن یک مقدار از روش زیر استفاده میکنیم:
توی بعضی از زبانهای برنامهنویسی وقتی یک متغیر رو با یک نوع خاص تعریف میکنیم، دیگه نمیتونیم توی اون متغیر، مقداری با نوع متفاوت بریزیم. برای مثال این کد رو در نظر بگیرید که به زبان جاوا (≠ جاوااسکریپت) نوشته شده:
String name = "John";
name = 10; // Error: incompatible types: int cannot be converted to String
توی این کد ابتدا باید نوع متغیر رو تعریف کنیم و به اون مقداری متناسب با نوع اون بدیم. متغیر name از نوع رشته هست و اگه به اون مقدار غیر رشتهای بدیم خطا میگیریم. اما چنین موضوعی رو توی جاوااسکریپت نداریم. متغیرها میتونن بدون مشخصکردن نوع پیادهسازی بشن و همچنین توی یک چرخه از برنامه، یک متغیر میتونه مقدارهایی با نوعهای کاملاً متفاوت بگیره:
به همین دلیل، جاوااسکریپت رو زبانی Dynamic و Loosely Typed میشناسیم. در مقایسه با جاوا که زبانی Static و Strong Typed هست.
خب دوستان با نوعهای دادهای جاوااسکریپت آشنا شدیم و قدم بزرگی رو برای یادگیری این زبان برداشتیم. توی قسمتهای بعدی هر نوع دادهای رو مفصل بررسی میکنیم. روزتون خوش 😉✌️