شایان بمانیان
شایان بمانیان
خواندن ۲ دقیقه·۴ سال پیش

فرق دیتا‌تایپ های primitive و non-primitive در JS

سلام! دوماهی شد که پست جدید نذاشتم و همچنان جهان از شر کرونا راحت نشده! امیدوارم حال شما و عزیزانتون خوب باشه و همگی سلامت باشیم.

خب این پستی که امروز درنظر گرفتم بذارم درباره دیتاتایپ ها در جاوا اسکریپت هست که به دو دسته کلی تقسیم میشن. نوع اول primitive و نوع دوم non-primitive. خب اول بریم ببینیم که اصلا یعنی چی و به‌حال ما چه فرقی میکنه!

طبق تعریف MDN دیتاتایپ های primitive دیتا هایی هستن که «آبجکت» نیستن و هیچ «متدی» ندارن.

خب پس باتوجه به تعریف بالا دیتاتایپ های primitive عبارتند از:

Boolean, Number, String, Bigint, Symbol, undefined

و دیتاتایپ های non-primitive همون آبجکت‌ها هستن (که شامل فانکشن‌ها، آرایه‌ها و Date هم میشن)

خب! پس تا اینجا دیتاتایپ‌ها رو شناختیم و تفکیک کردیم، حالا بریم ببینیم که چرا لازمه ما این موضوع رو بدونیم.

۱) اینکه دیتاتایپ های primitve درواقع immutable هستن. توضیحش رو با یک مثال ببینید:

let myString = &quottest&quot myString[0] = &quotT&quot console.log(myString) // output: test

خب ولی شاید براتون سوال پیش بیاد! میگید که من میتونم مقدارش رو عوض کنم که! اینجوری:

let myString = &quottest&quot myString = &quothello world&quot 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 تغییری ایجاد نمیشه.

خب این کل مطلبی بود که میخواستم توی این پست بگم! امیدوارم براتون مفید بوده باشه.

مثل همیشه خوشحال میشم نظرات و پیشنهاداتون رو توی قسمت کامنت ها با من به اشتراک بگذارید.


javascriptdata typesجاوا اسکریپت
علاقه‌مند به کد ‌و هنر
شاید از این پست‌ها خوشتان بیاید