مقایسه سطحی و عمیق در جاواسکریپت

یکی از دلایل عجیب بودن جاواسکریپت، رفتار متفاوت این زبان تو جاهای مختلف هست. تو زبان جاواسکریپت، رفتار عملگر مقایسه سطحی (( == )) و مقایسه عمیق (( === ))‌ در جاهای مختلف می‌تونه متفاوت باشه. بریم ببینیم که مقایسه سطحی و عمیق تو جاواسکریپت چی هست؟

تو این نوشته قصد دارم مقایسه سطحی و عمیق در جاواسکرپیت رو بررسی کنم (البته به صورت خیلی ساده) و با استفاده از ( )Object.is راهکار بهتری برای مقایسه ارائه بدم.

مقایسه سطحی و عمیق در جاواسکریپت
مقایسه سطحی و عمیق در جاواسکریپت


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

https://virgool.io/JavaScript8/استاتیک-تایپ-و-داینامیک-تایپ-c8eopdnug3xt

ازونجایی که جاواسکریپت برای متغیرهاش تایپ در نظر نمی‌گیره، موقع چک کردن شرط مساوی و برابری، می‌تونه به ۲ شکل برخورد کنه. مقایسه کم عمق و مقایسه عمیق.
مقایسه عمیق، علاوه بر مقایسه مقدار، نوع متغیر رو هم مقایسه می‌کنه.
مقایسه کم عمق کاری به نوع متغیر نداره و همین موضوع باعث می‌شه تبدیل خودکار یک نوع به نوعی دیگر (coercion) به وجود بیاد.

رفتار جاواسکریپت با عملگر مساوی
رفتار جاواسکریپت با عملگر مساوی


برای مثال به این مقایسه های زیر دقت کنید:

مقایسه در جاواسکریپت
مقایسه در جاواسکریپت


این مواقع که جاواسکریپت رفتاری گیج کننده داره استفاده از متد Object.is می‌تونه کمک کنه!

استفاده از Object.is
استفاده از Object.is


بهترین و مطمئن ترین روش برای مقایسه دو چیز تو جاواسکریپت استفاده از متد Object.is هست

برای اینکه همه حالت های مقایسه سطحی، مقایسه عمیق و Object.is رو ببینید به شکل زیر دقت کنید:

جدول مقایسه عملگر تساوی در جاواسکریپت
جدول مقایسه عملگر تساوی در جاواسکریپت


در مورد عملگر تساوی جاواسکریپت و نحوه مقایسه اش بحث های عمیقی وجود داره که امیدوارم در آینده بتونم در مورد اونها هم بنویسم.


سایر نوشته های من در ویرگول:

https://virgool.io/@novonimo/کلوژر-جاواسکرپیت-در-۱-دقیقه-um6jmr9unnyk
https://virgool.io/JavaScript8/معرفی-flow-برای-جاواسکرپیت-ogssae9iaif4
https://virgool.io/JavaScript8/معرفی-storybookjs-ub1k1h88bda6
https://virgool.io/JavaScript8/ویژگی-های-جدید-اکماسکریپت-۲%DB%B0۱۹-قسمت-اول-gs7mlxwoxu57



Follow me on social media
Telegram
Facebook
Twitter
Linkedin
Virgool