سلام! دوماهی شد که پست جدید نذاشتم و همچنان جهان از شر کرونا راحت نشده! امیدوارم حال شما و عزیزانتون خوب باشه و همگی سلامت باشیم.
خب این پستی که امروز درنظر گرفتم بذارم درباره دیتاتایپ ها در جاوا اسکریپت هست که به دو دسته کلی تقسیم میشن. نوع اول primitive و نوع دوم non-primitive. خب اول بریم ببینیم که اصلا یعنی چی و بهحال ما چه فرقی میکنه!
طبق تعریف MDN دیتاتایپ های primitive دیتا هایی هستن که «آبجکت» نیستن و هیچ «متدی» ندارن.
خب پس باتوجه به تعریف بالا دیتاتایپ های primitive عبارتند از:
Boolean, Number, String, Bigint, Symbol, undefined
و دیتاتایپ های non-primitive همون آبجکتها هستن (که شامل فانکشنها، آرایهها و Date هم میشن)
خب! پس تا اینجا دیتاتایپها رو شناختیم و تفکیک کردیم، حالا بریم ببینیم که چرا لازمه ما این موضوع رو بدونیم.
۱) اینکه دیتاتایپ های primitve درواقع immutable هستن. توضیحش رو با یک مثال ببینید:
let myString = "test" myString[0] = "T" console.log(myString) // output: test
خب ولی شاید براتون سوال پیش بیاد! میگید که من میتونم مقدارش رو عوض کنم که! اینجوری:
let myString = "test" myString = "hello world" console.log(myString) // output: hello world
اینجا میایم میگیم بله، حق با شماست ولی عوض کردن (replace) کردن مقدار و mutate کردن متفاوت هستن. پس ما میتونیم replace کنیم ولی نمیتونیم mutate کنیم.
۲) فرض کنیم دوتا آرایه داریم مثل زیر:
const a = [1, 2, 3] const b = [1, 2, 3]
بنظر شما جواب تساوی زیر چی میشه؟
a === b
توی پرانتز بگم که تفاوت دو مساوی (==) و سه مساوی (===) در جیاس رو اگر نمیدونید این مقاله رو بخونید.
برگردیم به جواب بالایی! و بله جوابش چیزی نیست جز false! چرا؟ چون توی دیتاتایپ های non-primitive ما همیشه جواب مقایسه های از این نوعمون false میشه. بازم چرا؟ چون متغیر a توی یک خونه از حافظه ذخیره شده و متغیر b در یک خونه دیگه. پس جواب false میشه.
به اسکرینشات زیر توجه کنید:
اینجا ما b رو مساوی a قرار دادیم پس یعنی جفتشون دارن به یک خونه از حافظه اشاره میکنن. در نتیجه وقتی توی b مقدار ۴ رو پوش کردیم، مقدار ۴ به a هم اضافه شده.
و حالا یه اسکرینشات دیگه:
اینجا ما در واقع اومدیم یه کلون از a ساختیم یعنی درواقع اصلا مقادیر آرایه a رو برداشتیم (به خونه حافظهش کاری نداشتیم) و آرایه جدید b رو ساختیم و مقادیر رو گذاشتیم داخلش، پس اگر توی b مقدار ۴ رو پوش کنیم توی a تغییری ایجاد نمیشه.
خب این کل مطلبی بود که میخواستم توی این پست بگم! امیدوارم براتون مفید بوده باشه.
مثل همیشه خوشحال میشم نظرات و پیشنهاداتون رو توی قسمت کامنت ها با من به اشتراک بگذارید.