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

یک مقدار توی جاوااسکریپت همیشه از یک تایپ خاص هست به عنوان مثال رشته یا یک عدددر جاوااسکریپت هشت تایپ داده اصلی وجود داره، اینجا ما به طور کلی به آنها خواهیم پرداخت و در فصل های بعدی به طور مفصل در مورد هر یک صحبت خواهیم کرد.ما میتونیم هر تایپ رو توی یک متغیر قرار بدیم، به عنوان مثال یک متغیر میتونه اول یک رشته باشه و بعد یک عدد رو ذخیره کنه// no erorr let message = &quothello&quot message = 123456;زبان های برنامه‌نویسی که اجازه این کار و به ما میدن مثل جاوااسکریپت «تایپ پویا» میگن بهشون به این معنی که انواع دیتا تایپ‌ها وجود دارن اما متغیر‌ها به هیچ کدوم از اونا محدود نیستن.عدد(Number)let n = 123; n = 12.345;تایپ عدد هر دو مقدار عدد صحیح و اعشاری رو نشون میده عملگر های زیاید برای کار با عدد وجود داره مثل ضرب * ، تقسیم / ، جمع + ، تفریق − و غیره ...علاوه بر عدد های عادی، به اصطلاح «مقادیر ویژه عددی» وجود دارد که متعلق به این دیتا تایپ عدد هستن:Infinity , -Infinity , NaN بی‌نهایت (Infinity) نشان دهنده Infinity ∞ ریاضی هست این مقدار خاص هست که از هر عددی بیشتره می‌تونیم اونو در نتیجه تقسیم بر صفر بدست بیاریم:alert( 1 / 0 ); // Infinityیا فقط مستقیم بهش اشاره کنیم:‌alert( Infinity ); // Infinityمقدار (NaN) نشان دهنده یک خطای محاسباتی هست، این یک نتیجه از عملیات ریاضی نادرست یا تعریف نشده هست به عنوان مثال:‌alert( &quotnot a number&quot / 2 ); // NaN, such division is erroneousهر عملی بر روی NaN نتیجه NaN خواهد داشت :alert( &quotnot a number&quot / 2 + 5 ); // NaNدر نتیجه اگر NaN توی عملیات ریاضیاتی‌ای وجود داشته باشه، بر روی تمام معادله تاثیر میذاره (نتیجه معادله برابر NaN خواهد بود)عملیات ریاضی در جاوا اسکریپت امن هست ما هر نوع عملی میتونیم انجام بدیم مثل تقسیم بر صفر. اسکریپت ما هیچ‌وقت با خطا مواجه نخواهد شد. در بدترین حالت NaN را به عنوان نتیجه خواهیم گرفتاعداد بزرگ (BigInt)توی جاوااسکریپت تایپ Number نمیتونه اعداد بزرگ‌تر از (۱ - ۵۳^۲ ) یعنی (9007199254740991) رو نشون بده و کمتر از (۱−۵۳^۲)− برای اعداد منفیبرای بیشتر اهداف که کاملا به اندازه کافی هست، اما گاهی اوقات ما نیاز اعداد واقعا بزرگ داریم، به عنوان مثال، برای رمزنگاری یا زمان سنج با دقت میکرو ثانیهتایپ BigInt اخیرا به زبان اضافه شده تا اعداد صحیح با طول دلخواه رو نشون بده یک مقدار BigInt با اضافه کردن حرف n به اخر یک عدد صحیح ایجاد میشه // the &quotn&quot at the end means it's a BigInt const bigInt = 1234567890123456789012345678901234567890n;از اونجایی که BigInt به ندرت استفاده میشه اینجا اون رو توضیح نمیدیم اما یک فصل جداگانه رو بهش اختصاص دادیم وقتی به چنین اعداد بزرگی احتیاج دارین اونجا رو بخونین (توی قسمت های بعدی قرار میدم براتون)مشکلات سازگاریدر حال حاضر BigInt توسط مرورگر های FireFox/Chrome/Edge/Safari پشتیبانی میشه و همون طور که میتونین حدس بزنین مرورگر IE پشتیبانیش نمیکنه توی این لینک هم میتونین چک کنین که دقیقا روی چه ورژن هایی از مرورگر ها پشتیبانی میشهرشته(String) یه رشته توی جاوااسکریپت باید بین دو تا کوتِیشِن باشه let str = &quotHello&quot 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 = &quotJohn&quot // embed a variable alert( `Hello, ${name}!` ); // Hello, John! // embed an expression alert( `the result is ${1 + 2}` ); // the result is 3عبارت داخل {...}$ محاسبه میشه و نتیجه‌اش به بخشی از رشته تبدیل میشه ما میتونیم هر چیزی رو توش قرار بدیم مثل متغیر یا یک عبارت مثل ۱ + ۲ یا یه چیز پیچیده ترلطفا توجه کنین این قابلیت فقط زمانی هست که از بک‌تیک استفاده کنین توی دابل و سینگل کوتِیشِن این قابلیت وجود نداره alert( &quotthe result is ${1 + 2}&quot ); // the result is ${1 + 2} (double quotes do nothing)در مورد رشته‌ها توی آموزش های بعدی بیشتر توضیح میدیمتایپ کارکتری وجود نداره در برخی زبان‌ها یه تایپ خاص به اسم «character» وجود داره که برای یک کاراکتر هست.به عنوان مثال در زبان برنامه‌نویسی C و Java این نوع «char» نام گذاری شدهدر جاوااسکریپت، این مدل تایپ رو نداریم. فقط یه تایپ String داریم، یک String میتونه خالی باشه یا یک کاراکتر داشته باشه و یا خیلی بیشتر از یک کاراکترتایپ منطقی‌(Boolean)تایپ منطقی فقط دو تا مقدار 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 &quotyes&quot)که مثال بالا یعنی ۴ بزرگتر از ۱ هست؟ و جوابش میشه «بله» یا همون trueدر مورد Boolean ها در بخش‌های بعدی صحبت خواهیم کرد.مقدار nullمقدار null به هیچ کدوم از دیتا تایپ هایی که بالا گفتیم ربطی ندارهاین یک تایپ جداگانه هست که فقط شامل مقدار null هست :let age = null;در جاوااسکریپت مثل بعضی از زبان های برنامه نویسی null به هیچ آبجکتی اشاره نمیکنه یا اشاره‌گر به null نیست فقط یه مقدار خاص هست که نشون‌دهنده «هیچی» ، «خالی» و یا «مقدار ناشناخته» هستکد بالا یعنی مقدار سن ناشناخته هستمقدار undefinedمقدار undefined هم مثل null جدا از بقیه هست و ربطی نداره به هیچ تایپیمعنی undefined یعنی «مقداری هنوز اختصاص داده نشده»اگه یک متغیر تعریف بشه اما مقداردهی نشه اون موقع مقدارش undefined هست let age; alert(age); // shows &quotundefined&quotاز نظر فنی میشه به یک متغیر مقدار undefined رو اختصاص داد :let age = 100; // change the value to undefined age = undefined; alert(age); // &quotundefined&quotاما ما این کار رو توصیه نمی‌کنیم و برای تخصیص مقدار "خالی" یا "ناشناخته" از null استفاده می‌کنیم و از undefined برای بررسی اینکه به متغیری مقدار تخصیص یافته یا خیر استفاده می‌کنیمتایپ Objects و Symbolsتایپ object یک تایپ خاص هست به تایپ های دیگه میگن تایپ اولیه چون که مقدار اونا فقط میتونه یه چیز باشه (مثل رشته، عدد یا بقیه چیزا) در مقابل object ها برای ذخیره مجموعه‌ای از داده ها و موجودیت های پیچیده‌تر استفاده می‌شن بعد از اینکه در مورد تایپ های اولیه بیشتر مطالعه کردیم، در مورد object ها بیشتر خواهیم آموختنوع symbol برای ایجاد یک شناسه منحصر به فرد برای object ها مورد استفاده قرار میگیره. برای تکمیل عنوان این بخش این نوع داده را نیز در اینجا گفتیم ولی بهتره جزئیات اون رو در بخش‌های بعدی بررسی کنیمعملگر typeof عملگر typeof تایپ یک مقدار رو برمیگردونه و این خیلی به درد میخوره وقتی که ما میخوایم روی مقدارهایی با تایپ های مختلف عملیات خاصی انجام بدیم یا این که فقط بخوایم چک کنیم که تایپ فلان مقدار چیه به دو صورت میتونیم ازش استفاده کنیم:۱. به صورت عملگر : typeof x۲. به صورت فانکشن: typeof(x)به عبارت دیگه این هم بدون پرانتز میشه ازش استفاده کرد و هم با پرانتز، نتیجه‌اش هم یکسانه وقتی که typeof x رو استفاده میکنم نتیجه‌اش یه رشته هست که تایپ مقدار x رو برامون برمیگردونه typeof undefined // &quotundefined&quot typeof 0 // &quotnumber&quot typeof 10n // &quotbigint&quot typeof true // &quotboolean&quot typeof &quotfoo&quot // &quotstring&quot typeof Symbol(&quotid&quot) // &quotsymbol&quot typeof Math // &quotobject&quot (1) typeof null // &quotobject&quot (2) typeof alert // &quotfunction&quot (3)سه خط آخر ممکنه نیاز به توضیحات اضافی داشته باشند: ۱. آبجکت Math اصطلاحا built-in (از پیش نوشته شده در هسته زبان) هست که عملیات متنوع ریاضیاتی در اختیار ما قرار میده. در اینجا صرفا یک مثال از اون رو نمایش دادیم و در بخش Numbers با اون بیشتر آشنا خواهیم شد۲. خروجی typeof null همونطور که می‌بینید "object" هست و این صحیح نیست. این یک خطا در نوع کار typeof هست که به منظور سازگاری باقی مونده مطمئنا null یک object نیست. خودِ null یکی از انواع داده در جاوا اسکریپته۳. تایپ alert یک فانکشن هست چرا که alert یکی از فانکشن‌های جاوا اسکریپت هست ما در بخش‌های بعدی با فانکشن‌ها بیشتر آشنا میشیم و خواهیم آموخت که نوعی تحت عنوان فانکشن نداریم و خودِ فانکشن‌ها در اصل از نوعِ object هستن اما عملگر typeof با اونا به طرز دیگه‌ای برخورد می‌کنهخلاصه۸ تا تایپ ابتدایی توی جاوااسکریپت وجود داره اعداد(number) برای هر نوع عددی استفاده میشه صحیح، اعشاری اعداد بزرگ(bigint) برای اعداد صحیح با طول دلخواه استفاده میشه رشته(string) برای مقدار های رشته‌ای استفاده میشه یک رشته میتونه خالی باشه یا یک کاراکتر داشته باشه یا بیشتر از یک کاراکتر، تایپ جداگانه‌ای برای کاراکتر وجود نداره مقدار منطقی(boolean) برای صحیح/غلط یا همون True , Falseمقدار null برای مقدار های ناشناخته - خودش یه تایپ هست و به بقیه تایپ ها ربطی ندارهمقدار undefined برای مقدار های اختصاص داده نشده - این هم خودش یه تایپه و بقیه تایپ ها ربطی نداره مقدار obejct برای ساختمان داده های پیچیده‌تر مقدار symbol برای شناسه های یکتاعملگر typeof به ما این اجازه رو میده تا ببینیم توی متغیر چه نوع داده‌ای ذخیره شدهدو نوع میشه ازش استفاده کرد : typeof x یا typeof(x)یک رشته برمیگردونه که اسم تایپ اون مقدار هست مثل "string"برای null مقدار "object" رو برمیگردونه - این یه ارور توی زبان هست و واقعا اینجوری نیست و آبجکت نیست پست قبلی (متغیرها در جاوا‌اسکریپت) https://virgool.io/@mmasoudih/variables-ssgxg9o7o7je پست بعدی(آموزش جاوااسکریپت - تعامل با کاربر) https://virgool.io/@mmasoudih/alert-prompt-confirm-ex4bk8lxpat9 اگر توی این مقاله مشکلی بود یا خواستین توی این پروژه مشارکت کنین این لینک گیت‌هابش هست.منبعگیت‌هاب