عملگر های == و === در جاوا اسکریپت چه تفاوتی دارند؟؟

عملگر های == و === در جاوا اسکریپت چه تفاوتی دارند؟؟

اول بریم با هم هر کدوم از این عملگر ها رو توضیح بدیم و بگیم هر کدوم کجا کاربرد دارند و در اخر میریم چند تا مثال حل میکنیم و موارد خاص رو هم توضیح میدیم تا مطلب به خوبی جا بیفته.

عملگر == :

این عملگر برای مقایسه فقط به مقادیر دو طرف مقایسه نگاه میکند. یعنی به نوع (Type) داده ها که از چه نوعی هستند دقت نمیکند. مثلا اینکه طرفین مقایسه از نوع string , number , boolean و… هستند براش اهمیتی ندارد.

به مثال ساده زیر دقت کنید تا توضیحات بالا رو بهتر متوجه بشید.

const number1 = 12
const numberStr2 = '12'
console.log(number1 == numberStr2)

در بالا ما دو تا متغییر تعریف کردیم.

متغییر اول number1 که مقدارش برابر 12 و type اون number هست.

متغییر دوم number2 که مقدارش برابر 12 و type اون برابر string هست.

و در خط سوم اومدیم این دو تا متغییر رو با هم به کمک عملگر == مقایسه کردیم و نتیجه رو با کنسول نمایش دادیم.

پس در مثال بالا ما دو متغییر داریم که هر دو مقدارش برابر 12 هست با این تفاوت که یکی از جنس number هست و یکی از جنس string.

طبق توضیحات بالا بنظرتون خروجی اون لاگ چی میشه؟؟؟

گفتیم که عملگر == کاری به نوع متغییر ها نداره و فقط به مقادیر اون ها نگاه میکنه، پس در این مثال میاد و برای ما true رو چاپ میکنه.

عملگر === :

این عملگر در جاوا اسکریپت به صورت سختگیرانه عمل مقایسه رو انجام میده. در عملگر == دیدیم که کاری به نوع نداره و فقط به مقادیر نگاه میکنه و عمل مقایسه رو انجام میده. اما عملگر === میاد و برای ما علاوه بر مقدار به نوع داده ها هم نگاه میکنه و اگه نوع داده ها مثل هم نباشه مقدار false رو بر میگردونه.

مثلا همین مثال بالا رو نگاه کنید دوباره :

const number1 = 12
const numberStr2 = '12'
console.log(number1 === numberStr2)

اینجا اومدیم عمل مقایسه رو با === انجام دادیم و طبق انتظار برای ما مقدار false رو در کنسول لاگ خواهد گرفت زیرا با اینکه مقدار هر دو برابر 12 هست اما نوع یکی از متغییر ها برابر number هست و دیگری از جنس string به همین دلیل در عملگر === خروجی برای ما false خواهد بود.

مثال هایا عملگر == و == :

حالا بریم چند تا مثال ببنیم .

console.log(12 == 12) // output: true
console.log(12 === 12) // output: true

console.log(12 == '12') // output: true
console.log(12 === '12') // output: false

 ** console.log(0 == false) // output: true 
console.log(0 === false)  // output: false

 ** console.log('0' == false) // output: false
console.log('0' === false)  // output: false

در مثال های بالا دو تا از مثال ها که با دو تا علامت ستاره (**) مشخص شده اند یک نکته ریز دارند که با هم هر کدوم رو توضیح میدیم تا مطلب رو متوجه بشید.

در مثال اول که به صورت زیر هست :

 ** console.log(0 == false) // output: true 

در اینجا چرا خروجی برابر true شده ؟؟

در زبان جاوا اسکریپت صفر عددی دوباره بگم صفر عددی به صورت پیش فرض برابر false در نظر گرفته میشه. به همین خاطر که اینجا هم صفر عددی به کار رفته در عملگر دو مساوی که به نوع داده ها کار نداره صفر رو همون false در نظر گرفته و چون false == false هست خروجی true داده.

در مثال دوم که علامت علامت دار کردیم چرا خروجی false شده ؟؟

 ** console.log('0' == false) // output: false

اینجا اومده صفر متنی رو با false با عملگر == مقایسه کرده و همونطور که در مثال قبلی گفتیم فقط زمانی که صفر عددی باشه false در نظر گرفته میشه ولی اینجا صفر متنی هست به همین خاطر که صفر متنی با صفر عددی یکی نیست خروجی اینجا برابر false شده.

بررسی موارد خاص :

در عمل مقایسه یکسری موارد خاص وجود داره که باهم بررسی میکنیم .

1- NaN با هیچ چیز از خودش هم برابر نیست .


console.log(NaN == NaN ) // output: false

console.log(NaN === NaN ) // output: false

2- انواع null و undefinded در عملگر === به ما خروجی false و در عملگر == به ما خروجی true میدهند.

console.log(null == undefinded ) // output: true
console.log(null === undefinded ) // output: false

امیدوارم مطالب گفته شده براتون مفید و قابل فهم بوده باشه. ✌❤

مهدی ایلخانی نسب
طراح و توسعه دهنده وب و علاقه مند به چالش برنامه نویسی.

دیدگاهتان را بنویسید