۲۴ مرداد ۱۳۹۹

دنیای جاوااسکریپت ۱ - انواع مقدارها یا Values

Just Javascript By Maggie Appleton

جاوااسکریپت شامل ۹ نوع از مقادیر هست که ۷ مورد آن از در دسته‌ی Primitive و یا اولیه و ۲ مورد دیگر در دسته‌ی Object و Function قرار دارند.

انواع مقادیر

  1. Primitive
  2. Objects and Functions

مقادیر اولیه یا Primitive

فرق اساسی انواع مقادیر دسته‌ی Primitive با دسته‌ی Objects and Functions در این است که آنها غیر قابل تغییر هستن در صورتی که مقادیر موجود در دسته‌ی Objects and Functions قابل ویرایش هستند.

Just Javascript By Maggie Appleton

سعی کنید خروجی مثال زیر را حدس بزنید:

let lastName = 'abc';
lastName[0] = 'i';
console.log(lastName);

خروجی این متد یا نمایش "abc" خواهد بود یا یک پیغام خطا که به فعال بودن strict mode بستگی دارد ولی هرگز "ibc" نمایش داده نخواهد شد به این دلیل که "abc" یک نوع مقدار غیر قابل ویرایش است.

تناقض؟؟

نظر شما در رابطه با مثال زیر چیست؟

let pet = 'Narwhal';
pet = 'The Kraken';
console.log(pet); // "The Kraken"

خب شاید با نگاه اول شاید بگید که خب مقدار "Narwhal" به "The Kraken" در این مثال تغییر پیدا کرد اما در حقیقت با عمل انتصاب صرفا متغیر pet به مقدار جدید و مجزای "The Kraken" اشاره می‌کند.
نکته‌: متغیرها برابر با مقادیر نیست و این دو شامل دو مفهوم مجزا هستن. متغیرها صرفا به مقادیر اشاره می‌کنند.

Just Javascript By Maggie Appleton

۱ـ لیست مقادیر اولیه یا Primitive 

  • Undefined
    • تنها شامل مقدار undefined
    • برای نشان دادن نداشتن مقدار بصورت غیر عمدی (کنترل نشده)
  • Null
    • تنها شامل مقدار null
    • برای نشان دادن نداشتن مقدار بصورت عمدی (توسط ما کنترل یا مدیریت شده)
  • Booleans
    • دو مقدار true و false
    • برای استفاده در عملیات منطقی
  • Numbers
    • بازه‌ای از اعداد (-110, 3.14, ... )
    • برای استفاده در محاسبات ریاضی
    • در کد زیر مثال‌هایی که موجب تولید مقادیر مختلف نوع number می‌شود آورده شده‌است.
let scale = 0;
let a = 1 / scale; // Infinity
let b = 0 / scale; // NaN
let c = -a; // -Infinity
let d = 1 / c; // -0
  • انواع رشته‌ها ("asdasd" , "aaa" , ... )
  • برای نگهداری نوشته‌ها
  • Symbols
    • کاربرد غیرمعمول
    • برای پنهانسازی جزئیات پیاده‌سازی
  • BigInts
    • کاربرد غیر معمول و جدید
    • برای استفاده در عملیات ریاضی که نیاز به مقادیر بزرگ در محاسبات دارد
Just Javascript By Maggie Appleton

۲ـ مقادیر غیر اصلی یا همان Functions و Objects

  • Objects
    • {}, [], new Date() و ...
    • برای دسته‌بندی کردن یک بخشی از داده‌ها و کدها
  • Functions
    • برای اشاره به بخشی از کدها
Just Javascript By Maggie Appleton

پیدا کردن نوع مقادیر در جاوااسکریپت با استفاده از typeof

متد typeof در جاوااسکریپ یک مقدار به عنوان ورودی دریافت می‌کند و یک حالت از انواع ۹ حالتی که می‌تواند داشته باشد را بصورت یک رشته برمی‌گرداند، مانند مثال زیر.

typeof(4); // "number"

باگ جاوااسکریپت در تعیین نوع مقادیر با استفاده از typeof

به مثال زیر توجه کنید

typeof(null); // "object"

خروجی متد typeof جاوااسکریپ برای null مقدار "object" است درصورتی که null از نوع object نبوده و خودش یک نوع اصلی یا Primitive می‌باشد. (یک یادداشت از تاریخچه رخ دادن این باگ در جاوااسکریپت) امکان اصلاح این مشکل وجود نداشته به این دلیل که این باگ خیلی قدیمی بوده و رفع اون باعث ایجاد مشکل در وب‌سایتهای زیادی می‌شد.

خب حالا نظرتون در رابطه با مثال زیر چیه؟

typeof([]); // "object"

به نظرتون این هم باگ جاوااسکریپت هست و انتظار داشتین نوع arrays را دریافت کنید؟ اما اینطور نیست آرایه‌ها از نوع‌ها اصلی یا primitive نیستن و بنابراین از نوع object هستن و خروجی این کد صحیح است.

در جاوااسکریپت هیچ نوع دیگری وجود ندارد

شاید برای شما سوال پیش بیاید که خب تکلیف انواع دیگه مثل آرایه‌ها چی میشه؟

جاوااسکریپت فقط شامل همین ۹ نوع از مقادیر اصلی است که به شرح آن پرداختیم مابقی آن از مثل آرایه و تاریخ و ... از نوع Object به حساب می‌آیند. 

console.log(typeof([])); // "object"
console.log(typeof(new Date())); // "object"
console.log(typeof(/(hello|goodbye)/)); // "object"

فهرست مطالب `دنیای جاوااسکریپت`

نظرات خوانندگان این نوشته

تا به حال نظری ثبت نشد!

نظری در این مورد دارید؟ خوشحال می‌شم اون رو برام ارسال کنید.

captcha