یک مقدار توی جاوااسکریپت همیشه از یک تایپ خاص هست به عنوان مثال رشته یا یک عدد
در جاوااسکریپت هشت تایپ داده اصلی وجود داره، اینجا ما به طور کلی به آنها خواهیم پرداخت و در فصل های بعدی به طور مفصل در مورد هر یک صحبت خواهیم کرد.
ما میتونیم هر تایپ رو توی یک متغیر قرار بدیم، به عنوان مثال یک متغیر میتونه اول یک رشته باشه و بعد یک عدد رو ذخیره کنه
// no erorr let message = "hello" message = 123456;
زبان های برنامهنویسی که اجازه این کار و به ما میدن مثل جاوااسکریپت «تایپ پویا» میگن بهشون به این معنی که انواع دیتا تایپها وجود دارن اما متغیرها به هیچ کدوم از اونا محدود نیستن.
let n = 123; n = 12.345;
تایپ عدد هر دو مقدار عدد صحیح و اعشاری رو نشون میده
عملگر های زیاید برای کار با عدد وجود داره مثل ضرب * ، تقسیم / ، جمع + ، تفریق − و غیره ...
علاوه بر عدد های عادی، به اصطلاح «مقادیر ویژه عددی» وجود دارد که متعلق به این دیتا تایپ عدد هستن:
Infinity , -Infinity , NaN
بینهایت (Infinity) نشان دهنده Infinity ∞ ریاضی هست این مقدار خاص هست که از هر عددی بیشتره
میتونیم اونو در نتیجه تقسیم بر صفر بدست بیاریم:
alert( 1 / 0 ); // Infinity
یا فقط مستقیم بهش اشاره کنیم:
alert( Infinity ); // Infinity
مقدار (NaN) نشان دهنده یک خطای محاسباتی هست، این یک نتیجه از عملیات ریاضی نادرست یا تعریف نشده هست به عنوان مثال:
alert( "not a number" / 2 ); // NaN, such division is erroneous
هر عملی بر روی NaN نتیجه NaN خواهد داشت :
alert( "not a number" / 2 + 5 ); // NaN
در نتیجه اگر NaN توی عملیات ریاضیاتیای وجود داشته باشه، بر روی تمام معادله تاثیر میذاره (نتیجه معادله برابر NaN خواهد بود)
عملیات ریاضی در جاوا اسکریپت امن هست
ما هر نوع عملی میتونیم انجام بدیم مثل تقسیم بر صفر. اسکریپت ما هیچوقت با خطا مواجه نخواهد شد. در بدترین حالت NaN را به عنوان نتیجه خواهیم گرفت
توی جاوااسکریپت تایپ Number نمیتونه اعداد بزرگتر از (۱ - ۵۳^۲ ) یعنی (9007199254740991) رو نشون بده و کمتر از (۱−۵۳^۲)− برای اعداد منفی
برای بیشتر اهداف که کاملا به اندازه کافی هست، اما گاهی اوقات ما نیاز اعداد واقعا بزرگ داریم، به عنوان مثال، برای رمزنگاری یا زمان سنج با دقت میکرو ثانیه
تایپ BigInt اخیرا به زبان اضافه شده تا اعداد صحیح با طول دلخواه رو نشون بده
یک مقدار BigInt با اضافه کردن حرف n به اخر یک عدد صحیح ایجاد میشه
// the "n" at the end means it's a BigInt const bigInt = 1234567890123456789012345678901234567890n;
از اونجایی که BigInt به ندرت استفاده میشه اینجا اون رو توضیح نمیدیم اما یک فصل جداگانه رو بهش اختصاص دادیم وقتی به چنین اعداد بزرگی احتیاج دارین اونجا رو بخونین (توی قسمت های بعدی قرار میدم براتون)
مشکلات سازگاری
در حال حاضر BigInt توسط مرورگر های FireFox/Chrome/Edge/Safari پشتیبانی میشه و همون طور که میتونین حدس بزنین مرورگر IE پشتیبانیش نمیکنه
توی این لینک هم میتونین چک کنین که دقیقا روی چه ورژن هایی از مرورگر ها پشتیبانی میشه
یه رشته توی جاوااسکریپت باید بین دو تا کوتِیشِن باشه
let str = "Hello" let str2 = 'Single quotes are ok too'; let phrase = `can embed another ${str}`;
توی جاوا اسکریپت سه نوع کوتِیشِن داریم :
1. Double qoutes مانند "Hello".
2. Single qoutes مانند 'Hello'.
3. Backticks مانند `Hello`.
دابل و سینگل کوتِیشِن ساده هستن و فرقی ندارن با هم دیگه توی جاوااسکریپت
بکتیک توسعه یافته ساختار کوتِیشِن هست، به ما این اجازه رو میده تا متغیر و یا یه سری عملیاتها رو با قرار دادن اونا در {...}$ توی یک رشته قرار بدیم، به عنوان مثال:
let name = "John" // embed a variable alert( `Hello, ${name}!` ); // Hello, John! // embed an expression alert( `the result is ${1 + 2}` ); // the result is 3
عبارت داخل {...}$ محاسبه میشه و نتیجهاش به بخشی از رشته تبدیل میشه ما میتونیم هر چیزی رو توش قرار بدیم مثل متغیر یا یک عبارت مثل ۱ + ۲ یا یه چیز پیچیده تر
لطفا توجه کنین این قابلیت فقط زمانی هست که از بکتیک استفاده کنین توی دابل و سینگل کوتِیشِن این قابلیت وجود نداره
alert( "the result is ${1 + 2}" ); // the result is ${1 + 2} (double quotes do nothing)
در مورد رشتهها توی آموزش های بعدی بیشتر توضیح میدیم
تایپ کارکتری وجود نداره
در برخی زبانها یه تایپ خاص به اسم «character» وجود داره که برای یک کاراکتر هست.
به عنوان مثال در زبان برنامهنویسی C و Java این نوع «char» نام گذاری شده
در جاوااسکریپت، این مدل تایپ رو نداریم. فقط یه تایپ String داریم، یک String میتونه خالی باشه یا یک کاراکتر داشته باشه و یا خیلی بیشتر از یک کاراکتر
تایپ منطقی فقط دو تا مقدار True و False داره
این تایپ معمولا برای نگهداری مقدار های بله/خیر استفاده میشه، true یعنی «بله،درست» و false یعنی «نه، نادرست»
برای نمونه :
let nameFieldChecked = true; // yes, name field is checked let ageFieldChecked = false; // no, age field is not checked
مقدار های منطقی همچنین میتونین از نتیجه یک مقایسه هم باشن:
let isGreater = 4 > 1; alert( isGreater ); // true (the comparison result is "yes")
که مثال بالا یعنی ۴ بزرگتر از ۱ هست؟ و جوابش میشه «بله» یا همون true
در مورد Boolean ها در بخشهای بعدی صحبت خواهیم کرد.
مقدار null به هیچ کدوم از دیتا تایپ هایی که بالا گفتیم ربطی نداره
این یک تایپ جداگانه هست که فقط شامل مقدار null هست :
let age = null;
در جاوااسکریپت مثل بعضی از زبان های برنامه نویسی null به هیچ آبجکتی اشاره نمیکنه یا اشارهگر به null نیست
فقط یه مقدار خاص هست که نشوندهنده «هیچی» ، «خالی» و یا «مقدار ناشناخته» هست
کد بالا یعنی مقدار سن ناشناخته هست
مقدار undefined هم مثل null جدا از بقیه هست و ربطی نداره به هیچ تایپی
معنی undefined یعنی «مقداری هنوز اختصاص داده نشده»
اگه یک متغیر تعریف بشه اما مقداردهی نشه اون موقع مقدارش undefined هست
let age; alert(age); // shows "undefined"
از نظر فنی میشه به یک متغیر مقدار undefined رو اختصاص داد :
let age = 100; // change the value to undefined age = undefined; alert(age); // "undefined"
اما ما این کار رو توصیه نمیکنیم و برای تخصیص مقدار "خالی" یا "ناشناخته" از null استفاده میکنیم و از undefined برای بررسی اینکه به متغیری مقدار تخصیص یافته یا خیر استفاده میکنیم
تایپ object یک تایپ خاص هست
به تایپ های دیگه میگن تایپ اولیه چون که مقدار اونا فقط میتونه یه چیز باشه (مثل رشته، عدد یا بقیه چیزا) در مقابل object ها برای ذخیره مجموعهای از داده ها و موجودیت های پیچیدهتر استفاده میشن
بعد از اینکه در مورد تایپ های اولیه بیشتر مطالعه کردیم، در مورد object ها بیشتر خواهیم آموخت
نوع symbol برای ایجاد یک شناسه منحصر به فرد برای object ها مورد استفاده قرار میگیره. برای تکمیل عنوان این بخش این نوع داده را نیز در اینجا گفتیم ولی بهتره جزئیات اون رو در بخشهای بعدی بررسی کنیم
عملگر typeof تایپ یک مقدار رو برمیگردونه و این خیلی به درد میخوره وقتی که ما میخوایم روی مقدارهایی با تایپ های مختلف عملیات خاصی انجام بدیم یا این که فقط بخوایم چک کنیم که تایپ فلان مقدار چیه
به دو صورت میتونیم ازش استفاده کنیم:
۱. به صورت عملگر : typeof x
۲. به صورت فانکشن: typeof(x)
به عبارت دیگه این هم بدون پرانتز میشه ازش استفاده کرد و هم با پرانتز، نتیجهاش هم یکسانه
وقتی که typeof x رو استفاده میکنم نتیجهاش یه رشته هست که تایپ مقدار x رو برامون برمیگردونه
typeof undefined // "undefined" typeof 0 // "number" typeof 10n // "bigint" typeof true // "boolean" typeof "foo" // "string" typeof Symbol("id") // "symbol" typeof Math // "object" (1) typeof null // "object" (2) typeof alert // "function" (3)
سه خط آخر ممکنه نیاز به توضیحات اضافی داشته باشند:
۱. آبجکت Math اصطلاحا built-in (از پیش نوشته شده در هسته زبان) هست که عملیات متنوع ریاضیاتی در اختیار ما قرار میده. در اینجا صرفا یک مثال از اون رو نمایش دادیم و در بخش Numbers با اون بیشتر آشنا خواهیم شد
۲. خروجی typeof null همونطور که میبینید "object" هست و این صحیح نیست. این یک خطا در نوع کار typeof هست که به منظور سازگاری باقی مونده مطمئنا null یک object نیست. خودِ null یکی از انواع داده در جاوا اسکریپته
۳. تایپ alert یک فانکشن هست چرا که alert یکی از فانکشنهای جاوا اسکریپت هست ما در بخشهای بعدی با فانکشنها بیشتر آشنا میشیم و خواهیم آموخت که نوعی تحت عنوان فانکشن نداریم و خودِ فانکشنها در اصل از نوعِ object هستن اما عملگر typeof با اونا به طرز دیگهای برخورد میکنه
۸ تا تایپ ابتدایی توی جاوااسکریپت وجود داره
عملگر typeof به ما این اجازه رو میده تا ببینیم توی متغیر چه نوع دادهای ذخیره شده
اگر توی این مقاله مشکلی بود یا خواستین توی این پروژه مشارکت کنین این لینک گیتهابش هست.