جاوااسکریپت شامل ۹ نوع از مقادیر هست که ۷ مورد آن از در دستهی Primitive و یا اولیه و ۲ مورد دیگر در دستهی Object و Function قرار دارند.
انواع مقادیر
Primitive
Objects and Functions
مقادیر اولیه یا Primitive
فرق اساسی انواع مقادیر دستهی Primitive با دستهی Objects and Functions در این است که آنها غیر قابل تغییر هستن در صورتی که مقادیر موجود در دستهی Objects and Functions قابل ویرایش هستند.
سعی کنید خروجی مثال زیر را حدس بزنید:
خروجی این متد یا نمایش "abc" خواهد بود یا یک پیغام خطا که به فعال بودن strict mode بستگی دارد ولی هرگز "ibc" نمایش داده نخواهد شد به این دلیل که "abc" یک نوع مقدار غیر قابل ویرایش است.
تناقض؟؟
نظر شما در رابطه با مثال زیر چیست؟
خب شاید با نگاه اول شاید بگید که خب مقدار "Narwhal" به "The Kraken" در این مثال تغییر پیدا کرد اما در حقیقت با عمل انتصاب صرفا متغیر pet به مقدار جدید و مجزای "The Kraken" اشاره میکند. نکته: متغیرها برابر با مقادیر نیست و این دو شامل دو مفهوم مجزا هستن. متغیرها صرفا به مقادیر اشاره میکنند.
۱ـ لیست مقادیر اولیه یا Primitive
Undefined
تنها شامل مقدار undefined
برای نشان دادن نداشتن مقدار بصورت غیر عمدی (کنترل نشده)
Null
تنها شامل مقدار null
برای نشان دادن نداشتن مقدار بصورت عمدی (توسط ما کنترل یا مدیریت شده)
Booleans
دو مقدار true و false
برای استفاده در عملیات منطقی
Numbers
بازهای از اعداد (-110, 3.14, ... )
برای استفاده در محاسبات ریاضی
در کد زیر مثالهایی که موجب تولید مقادیر مختلف نوع number میشود آورده شدهاست.
انواع رشتهها ("asdasd" , "aaa" , ... )
برای نگهداری نوشتهها
Symbols
کاربرد غیرمعمول
برای پنهانسازی جزئیات پیادهسازی
BigInts
کاربرد غیر معمول و جدید
برای استفاده در عملیات ریاضی که نیاز به مقادیر بزرگ در محاسبات دارد
۲ـ مقادیر غیر اصلی یا همان Functions و Objects
Objects
, [], new Date() و ...
برای دستهبندی کردن یک بخشی از دادهها و کدها
Functions
برای اشاره به بخشی از کدها
پیدا کردن نوع مقادیر در جاوااسکریپت با استفاده از typeof
متد typeof در جاوااسکریپ یک مقدار به عنوان ورودی دریافت میکند و یک حالت از انواع ۹ حالتی که میتواند داشته باشد را بصورت یک رشته برمیگرداند، مانند مثال زیر.
باگ جاوااسکریپت در تعیین نوع مقادیر با استفاده از typeof
به مثال زیر توجه کنید
خروجی متد typeof جاوااسکریپ برای null مقدار "object" است درصورتی که null از نوع object نبوده و خودش یک نوع اصلی یا Primitive میباشد. (یک یادداشت از تاریخچه رخ دادن این باگ در جاوااسکریپت) امکان اصلاح این مشکل وجود نداشته به این دلیل که این باگ خیلی قدیمی بوده و رفع اون باعث ایجاد مشکل در وبسایتهای زیادی میشد.
خب حالا نظرتون در رابطه با مثال زیر چیه؟
به نظرتون این هم باگ جاوااسکریپت هست و انتظار داشتین نوع arrays را دریافت کنید؟ اما اینطور نیست آرایهها از نوعها اصلی یا primitive نیستن و بنابراین از نوع object هستن و خروجی این کد صحیح است.
در جاوااسکریپت هیچ نوع دیگری وجود ندارد
شاید برای شما سوال پیش بیاید که خب تکلیف انواع دیگه مثل آرایهها چی میشه؟
جاوااسکریپت فقط شامل همین ۹ نوع از مقادیر اصلی است که به شرح آن پرداختیم مابقی آن از مثل آرایه و تاریخ و ... از نوع Object به حساب میآیند.