== چه تفاوتی با === در جاوا اسکریپت دارد؟ برابری دقیق در مقابل سست توضیح داده شد

اگر در حال خواندن این وبلاگ هستید، احتمالاً جاوا اسکریپت را یاد می گیرید – و این عالی است.
دو برابر (==) و مساوی سه گانه (===) در جاوا اسکریپت اغلب باعث می شود مبتدی ها سر خود را خاردار کنند. این بدان معنا نیست که شما باید از جاوا اسکریپت بترسید، در واقع این اصطلاحات زمانی که جاوا اسکریپت را بدانید زیباتر می کند.
==
و ===
در جاوا اسکریپت چیست؟
اکنون، یک چیزی که باید به خاطر داشته باشیم این است که هر دو ==
و ===
برای مقایسه و یافتن درجه یکسانی یا برابری بین چیزهایی که مقایسه می کنیم استفاده می شود.
هر دو ==
و ===
اگر برابری را پیدا کنند true و در غیر این صورت false را برمی گرداند. اما نکته ای وجود دارد: ==
و ===
از معیارهای مختلفی برای اندازه گیری درجه برابری استفاده کنید.

با این گفته، بیایید بفهمیم که چگونه ==
(دو برابر) با ===
(سه برابر) با استفاده از مثال های مختلف متفاوت است.
چگونه Double Equals (==) کار می کند - با مثال
دو برابر (==) اغلب به عنوان "برابری سست" نامیده می شود زیرا قبل از انجام هر مقایسه ای اجباری از نوع اعمال می کند.
این بدان معناست که اگر نوع دادههای عملوندهایی که ما با هم مقایسه میکنیم متفاوت باشد، موتور جاوا اسکریپت به طور خودکار یکی از عملوندها را با دیگری تبدیل میکند تا مقایسه را ممکن کند.
بیایید با کمک یک مثال درک کنیم.
const a = 100; const b = '100'; console.log(a == b) // true
در مثال بالا دو متغیر a
و b
داریم. نوع متغیر a
number
و نوع متغیر b
string
است.
حال، وقتی دو متغیر را با استفاده از دو برابر ( ==
) مقایسه می کنیم، به عنوان خروجی true
می گیریم.
این به این دلیل است که نوع متغیر a
قبل از مقایسه به string
تبدیل می شود.
پس از مقایسه، مقدار در هر دو متغیر تحلیل می شود. اگر یکسان باشد، true
میشویم و در غیر این صورت false
میشویم. در مورد ما، true
است.
توجه به این نکته ضروری است که مقادیر واقعی بدون تغییر باقی می مانند. در هنگام مقایسه فقط به طور ضمنی تبدیل می شود.
قوانین برای نوع اجبار
مثال بالا بسیار آسان است، اینطور نیست؟ پس ، اجازه دهید دوباره آن را با یک مثال دیگر آزمایش کنیم. و پس از آن، قوانین اجبار نوع را تحلیل می کنیم.
const a = true; const b = 'true'; console.log(a == b)
حالا به نظر شما خروجی چه خواهد بود؟ اگر پاسخ شما true
بود، متاسفانه درست نیست. اما اگر متوجه شدید که false
است، تبریک میگوییم.
اگر پاسخ شما اشتباه بود، نگران نباشید زیرا ما قوانینی را یاد می گیریم که به شما در درک بهتر آن کمک می کند.
پس ، در اینجا قوانین مربوط به نوع اجبار در جاوا اسکریپت آمده است:
اگر هر یک از عملوندها یک string
باشد، عملوند دیگر به یک string
تبدیل می شود.
اگر هر یک از آنها یک number
باشد، عملوند دیگر به number
تبدیل می شود.
اگر هر یک از عملوندها یک boolean
باشد، به number
تبدیل می شود ( true
تبدیل به 1
و false
می شود 0
).
اگر یک عملوند یک object
و دیگری یک مقدار اولیه باشد، قبل از انجام مقایسه، شی به یک مقدار اولیه تبدیل می شود.
اگر یکی از عملوندها null
یا undefined
باشد، دیگری نیز باید null
یا undefined
باشد تا true
باشد. در غیر این صورت false
برمی گردد.
حالا از نقطه سه متوجه شدید که چرا پاسخ ما در مثال بالا false
بود.
به این دلیل است که مقدار متغیر a
( true
) قبل از مقایسه به عدد تبدیل می شود. پس پس از مقایسه - جایی که ما اکنون 1 و 'true'
را با هم مقایسه می کنیم - false
می شود زیرا متغیرها حاوی مقادیر متفاوتی هستند.
چگونه سه برابر است (===) کار می کند - با مثال
تساوی سه گانه (===) که به آن «برابری دقیق» نیز گفته می شود، مشابه نحوه عملکرد دو برابر (==) عمل می کند، با یک تفاوت مهم: انواع عملوندها را قبل از مقایسه تبدیل نمی کند.
هنگام مقایسه متغیرها، ابتدا تحلیل می کند که آیا انواع متفاوت هستند یا خیر. اگر این کار را انجام دهند، false
برمی گردد. اگر انواع مطابقت داشته باشند، مقدار را تحلیل می کند. اگر مقادیر یکسان باشند و عدد نباشند، true
را برمی گرداند.
در نهایت، اگر هر دو عملوند اعداد باشند و NaN
نباشند و مقدار یکسانی داشته باشند، مقدار true
را برمی گرداند. در غیر این صورت، false
.
بیایید این را با کمک مثال ها درک کنیم:
const a = 100; const b = '100'; console.log(a === b);
ما همان مثال بالا را آورده ایم، اما به جای مقایسه با دو برابر (==) با مساوی سه گانه (===) مقایسه می کنیم.
پس ، ممکن است پاسخ را قبلا حدس زده باشید. آره، false
، چرا؟ زیرا نوع متغیر a
عددی و نوع متغیر b
رشته ای است.
در هنگام مقایسه، ابتدا تحلیل های سه برابری برای انواع عملوندها انجام می شود - و این انواع در این مثال متفاوت هستند. پس ، false
برمی گردد.
بیایید به مثال دیگری نگاه کنیم:
const a = true; const b = 1; console.log(a === b);
در مثال بالا دو متغیر a
و b
داریم. نوع متغیر a
بولی و نوع متغیر b
عددی است.
پس ، اگر ما با استفاده از سه برابر (===) مقایسه کنیم، مقدار false
را برمیگرداند – زیرا باز هم، متغیرها انواع مختلفی دارند.
نتیجه
عملگرهای ==
و ===
در جاوا اسکریپت عملگرهای مقایسه ای هستند که ما از آنها برای تعیین برابر بودن یا نبودن دو مقدار استفاده می کنیم.
عملگر ==
یک مقایسه تساوی آزاد را انجام می دهد که در صورت لزوم، اجبار نوع را انجام می دهد تا مقایسه ممکن شود.
عملگر ===
، از سوی دیگر، یک مقایسه برابری دقیق را انجام می دهد که اجبار نوع را انجام نمی دهد و به عملوندها نیاز دارد که نوع یکسان (و همچنین مقدار یکسان) داشته باشند.
اجبار تایپ در جاوا اسکریپت گاهی اوقات میتواند منجر به نتایج غیرمنتظره شود، پس بیشتر توصیه میشود از عملگر برابری دقیق ===
به جای عملگر برابری شل ==
استفاده کنید.
ارسال نظر