تفاوت دو مساوی (==) و سه مساوی (===) در جاوااسکریپت

یکی از عملگرهای پر کاربرد در زبان‌های برنامه‌نویسی عملگرهای تساوی است. در زبان جاوااسکریپت دو عملگر == و === برای بررسی تساوی دو متغیرها استفاده می‌شود این دو عملگر تفاوت‌هایی جزئی دارند که در صورت عدم توجه به آن‌ها می‌تواند موجب بروز اشکال در کدها شود.

بحث از اونجایی شروع میشه که ما انواع مختلفی از دیتا رو میتونیم داشته باشیم مثل string, boolean, number , NaN , array, null و غیره یک زمانی هست شما براتون مهم نیست که نوع دیتایی که دارید با دیتای دیگه مقایسه میکنید چی هست و فقط براتون مهمه که این دو باهم برابر باشن؛ مثلا براتون فرقی نمیکنه 5 با "5" که پنج دومی درواقع یک string هست از چه نوعی هست و فقط مهمه که اینها اندازه ی برابری داشته باشن، تو این مورد ما از دو مساوی (==) استفاده میکنیم ولی اگر زمانی برای ما مهم بود که مثلا هر دو از نوع number باشن و نوع دیتا برامون اهمیت داشته باشه از (===) استفاده میکنیم.

عملگر ===

این عملگر دو متغیر را از دو بعد نوع و مقدار با هم مقایسه می کند اگر نوع و مقدار متغیرها دو طرف عملگر یکسان باشد مقدار true را بر می گرداند. مثال های زیر همه مقدار true می گیرند

5 === 5 // true 
'hello world' === 'hello world' // true (Both Strings, equal values)
true === true // true (Both Booleans, equal values)

اما مثال زیر مقدار false می گیرد زیر دو عملوند از لحاظ نوع همسان نیستند.

77 === '77'


عملگر ==

بر خلاف عملگر ===، عملگر == صرفا مقادیر دو متغییر را با هم مقایسه کرده در صورتی که مقادیر برابر باشد مقدار true بر می گرداند. در صورتی که دو متغیر از یک نوع نباشند ابتدا تبدیل نوع انجام می شود سپس مقایسه صورت می گیرد. این تبدیل ها می تواند موجب بروز مشکل شود مثال موارد زیر پس از تبدیل نوع برابر می شوند:

false, 0, and &quot&quot

و

null and undefined

در نتیجه مقایسه های زیر برابر true خواهد شد که لازم است دقت کنیم:

false == 0// true 
0 == &quot&quot // true
&quot&quot == false // true
NaN == null // false
NaN == undefined // false
NaN == NaN // false