ویرگول
ورودثبت نام
mohammad khakhsoor
mohammad khakhsoor
mohammad khakhsoor
mohammad khakhsoor
خواندن ۲ دقیقه·۲ سال پیش

AutoBoxing in javaScript ! 📦

Autoboxing? 📦?📤?📥?

سلام
primitive data type ها (بر خلاف ابجکت ها) ، هیچ متد یا پراپرتی ایی ندارند ، اما سوالی که در اولین لحظه برای ما ایجاد میشود اینکه پس این همه متد هایی که روی primitive ها ، اعمال میکینم چیست ؟

مثلا

const text = 'hello world'.toUpperCase()

یا مثلا

const num = 23.57949.toFixed(2)

اینها متد هایی هستند که ما داریم رو primitive ها اعمال میکنیم ، داستان چیه ؟ مگه primitive ها ، متد دارند؟

دقیقا همینجا ، بحث autoboxing مطرح میشود که البته این مورد مختص به JS نیست و در باقی زبان ها هم وجود دارد ، از طرفی این مبحث ، به اسم دیگری با عنوان wrapper classes هم شناخته می شود.

به این معنا که ، primitive ها همچنان بدون هیچ متد یا پراپرتی ای ندارند اما هنگامی که ما نیاز داریم که یک متدی روی این مقادیر ، اعمال کنیم ، در آن لحظه ، ابجکت متناسب با نوع آن مقدار ، آن value را box یا به اصطلاح wrap میکند و چون یک ابجکت آن را در بر گرفته ، اینجاست که متد مد نظر ، در دسترس قرار میگیرد و میتوان از قابلیت هایی که آن ابجکت متناسب با نوع مقدار در اختیار ما قرار میدهد ، استفاده کنیم
منظور از ابجکت متناسب با نوع primitive value چیست؟
حتما با فانکشن های Number() String() Boolean() برخورد داشتین ، هر کدام از این ابجکت ها ، متد های خاص خود را دارند که هر کدام با توجه به نوع مقدار ، متد هایش قابل استفاده است ، اگر در کنسول به Number.prototype نگاه بندازید ، متد هایی را میبیند که قابل اجرا بر روی عدد ها هست و اگر به String.prototype نگاه بندازید ، متد هایی را میبیند که قابل اعمال بر روی مقادیر از نوع string است ، اینها در واقع همان wrapper object هایی هستند که مقادیر primitive متناسب با خود را wrap می کنند و متد مورد نظر اعمال خواهد شد و بعد از اعمال متد ، ان مقدارunBox میشود و به ما برگردانده میشود و بعد از این مسئله با اینکه بنوعی تبدیل به ابجکت شده و متد اعمال شده ، بعد از آن مجدد تبدیل به یک مقدارprimitive میشود و همچنان immutable است

پ.ن: رفتار این فانکشن ها ، محدود به این موردی که گفتیم نمیشود چرا که اینها constructor function هستند ، اگر در ابتدای این فانکشن ها new keyword قرار داده شود ، رفتار متفاوتی از آنها را شاهد خواهیم بود.

جاوااسکریپتفرانت اندreactjavascript
۱
۳
mohammad khakhsoor
mohammad khakhsoor
شاید از این پست‌ها خوشتان بیاید