عملگرهای مقایسه

عملگرهای مقایسه مقادیر دو عملوند را با هم مقایسه می کنند و true یا false بودن گزاره ای که آنها تشکیل می دهند را ارزیابی می کنند. مثال زیر از عملگر برابری دقیق ( === ) برای مقایسه دو عملوند استفاده می کند: عبارت 2 + 2 و مقدار 4 . از آنجایی که نتیجه عبارت و مقدار عدد 4 یکسان است، این عبارت به صورت true ارزیابی می شود:

2 + 2 === 4
> true

نوع اجبار و برابری

دو تا از پرکاربردترین عملگرهای مقایسه == برای برابری ضعیف و === برای برابری دقیق هستند. == با وادار کردن عملوندها به تطبیق انواع داده ها، در صورت امکان، یک مقایسه ضعیف بین دو مقدار انجام می دهد. برای مثال، 2 == "2" true را برمی گرداند، حتی اگر مقایسه بین یک مقدار عددی و یک مقدار رشته ای انجام شود.

2 == 2
> true

2 == "2"
> true

همین امر در مورد != نیز صدق می‌کند، که فقط در صورتی true برمی‌گرداند که عملوندهای مقایسه شده تقریباً برابر نباشند .

2 != 3
> true

2 != "2"
> false

مقایسه های دقیق با استفاده از === یا !== از نوع اجباری استفاده نکنید. برای اینکه یک مقایسه دقیق به true ارزیابی شود، مقادیر مقایسه شده باید دارای یک نوع داده باشند. به همین دلیل، 2 == "2" true را برمی گرداند، اما 2 === "2" false را برمی گرداند:

2 === 3
> false

2 === "2"
> false

برای رفع هرگونه ابهامی که ممکن است در نتیجه اجبار خودکار ایجاد شود، در صورت امکان از === استفاده کنید.

اپراتور توضیحات استفاده نتیجه
=== کاملاً برابر است 2 === 2 درست است
!== نه کاملاً برابر 2 !== "2" درست است
== مساوی (یا "تا حدی برابر") 2 == "2" درست است
!= برابر نیست 2 != "3" درست است
> بزرگتر از 3 > 2 درست است
>= بزرگتر یا مساوی با 2>= 2 درست است
< کمتر از 2 < 3 درست است
<= کمتر یا مساوی با 2 <= 3 درست است

راست و دروغ

همه مقادیر در جاوا اسکریپت به طور ضمنی true یا false هستند و می‌توان آنها را به مقدار بولی متناظر اجباری کرد - برای مثال، با استفاده از مقایسه‌کننده «مساوی تقریباً». مجموعه محدودی از مقادیر اجباری به false :

  • 0
  • null
  • undefined
  • NaN
  • یک رشته خالی ( "" )

همه مقادیر دیگر به true اجباری می شوند، از جمله هر رشته ای که حاوی یک یا چند کاراکتر و همه اعداد غیر صفر باشد. اینها معمولاً ارزش‌های «حقیقت» و «کاذب» نامیده می‌شوند.

"My string" == true
> true

100 == true
> true

0 == true
> false

عملگرهای منطقی

از عملگرهای منطقی AND ( && )، OR ( || ) و NOT ( ! ) برای کنترل جریان یک اسکریپت بر اساس ارزیابی دو یا چند عبارت شرطی استفاده کنید:


2 === 3 || 5 === 5;
> true

2 === 2 && 2 === "2"
> false

2 === 2 && !"My string."
> false

یک عبارت منطقی NOT ( ! ) مقدار درستی یا نادرستی یک عملوند را نفی می‌کند، در صورتی که عملوند به false ارزیابی شود، به true و اگر عملوند به true ارزیابی شود false :


true
> true

!true
> false

!false
> true

استفاده از عملگر منطقی NOT ( ! ) در مقابل یک نوع داده دیگر، مانند یک عدد یا یک رشته، آن مقدار را به یک بولی وادار می کند و مقدار درستی یا نادرستی نتیجه را معکوس می کند.

"string"
> "string"

!"string"
> false

0
> 0

!0
> true

استفاده از دو عملگر NOT برای وادار کردن سریع داده ها به مقدار بولی منطبق، معمول است:

!!"string"
> true

!!0
> false

عملگرهای منطقی AND و OR به خودی خود هیچ اجباری را انجام نمی دهند. آنها مقدار یکی از دو عملوند مورد ارزیابی را با عملوند انتخاب شده توسط آن ارزیابی برمی گردانند.

AND منطقی ( && ) اولی از دو عملوند خود را تنها در صورتی برمی‌گرداند که آن عملوند false باشد، و عملوند دوم را در غیر این صورت. در مقایسه‌هایی که با مقادیر بولی ارزیابی می‌شوند، فقط در صورتی true برمی‌گرداند که عملوندهای هر دو طرف منطقی AND برابر با true ارزیابی شوند. اگر هر یک از طرفین به false ارزیابی کند، false را برمی گرداند.

true && false
> false

false && true
> false

false && false
> false

true && true
> true

هنگامی که && با دو عملوند غیر بولی استفاده می شود، اگر بتوان آن را به false وادار کرد، عملوند اول بدون تغییر برگردانده می شود. اگر بتوان عملوند اول را وادار به true کرد، عملوند دوم بدون تغییر برگردانده می‌شود:

false && "My string"
> false

null && "My string"
> null

"My string" && false
> false

"My string" && "My second string"
> "My second string"

2 === 2 && "My string"
> "My string"

OR منطقی ( || ) اولین مورد از دو عملوند خود را تنها در صورتی برمی‌گرداند که آن عملوند به true ارزیابی شود، و عملوند دوم در غیر این صورت. در مقایسه‌هایی که با مقادیر بولی ارزیابی می‌شوند، به این معنی است که اگر هر یک از عملوندها به true ارزیابی شود، true برمی‌گرداند، و اگر هیچ‌یک از طرفین به true ارزیابی نکنند، false برمی‌گرداند:

true || false
> true

false || true
> true

true || true
> true

false || false
> false

هنگام استفاده از || با دو عملوند غیر بولی، عملوند اول را بدون تغییر برمی‌گرداند اگر بتوان آن را وادار به true . اگر بتوان عملوند اول را مجبور به false کرد، عملوند دوم بدون تغییر برگردانده می‌شود:

false || "My string"
> "My string"

null || "My string"
> "My string"

"My string" || false
> "My string"

"My string" || "My second string"
> "My string"

2 === 2 || "My string"
> true

عملگر ادغام باطل

در ES2020 معرفی شد ، "اپراتور تلفیقی تهی" ( ?? ) اولین عملوند را تنها در صورتی برمی گرداند که آن عملوند مقداری غیر از null یا undefined داشته باشد. در غیر این صورت، عملوند دوم را برمی گرداند.

null ?? "My string"
> "My string"

undefined ?? "My string"
> "My string"

true ?? "My string";
> true

?? شبیه یک OR منطقی است، اما در نحوه ارزیابی اولین عملوند سخت‌تر است. || عملوند دوم را برای هر عبارتی که می تواند اجباری به false شود، از جمله undefined و null برمی گرداند. ?? عملوند دوم را زمانی برمی‌گرداند که عملوند اول چیزی غیر از null یا undefined باشد، حتی اگر بتوان آن را false کرد:

0 ?? "My string";
> 0

false ?? "My string";
> false

undefined ?? "My string";
> "My string"

عملگرهای تخصیص منطقی

از عملگرهای انتساب برای تخصیص مقدار عملگر دوم به عملگر اول استفاده کنید. متداول‌ترین مثال برای این کار یک علامت تساوی منفرد ( = ) است که برای تخصیص یک مقدار به یک متغیر اعلام شده استفاده می‌شود.

از عملگرهای تخصیص منطقی برای تخصیص شرطی یک مقدار به یک متغیر بر اساس مقدار درستی یا نادرستی آن متغیر استفاده کنید.

عملگر منطقی و تخصیص ( &&= ) عملوند دوم را ارزیابی می‌کند و به عملوند اول اختصاص می‌دهد در صورتی که عملوند اول true ارزیابی شود - در واقع، "اگر عملوند اول درست است، به جای آن، مقدار عملوند دوم را به آن اختصاص دهید. :"

let myVariable = false;
myVariable
&&= 2 + 2;
> false

myVariable
= true;
myVariable
&&= 2 + 2;
> 4

مقدار درستی یا نادرستی عملوند اول تعیین می کند که آیا یک تخصیص انجام می شود. با این حال، تلاش برای ارزیابی عملوند اول با استفاده از یک عملگر مقایسه منجر به یک بولی true یا false می‌شود که نمی‌توان مقداری به آن اختصاص داد:

let myVariable = 5;
myVariable
> 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment

عملگر منطقی OR ( ||= ) عملوند دوم را ارزیابی می کند و اگر عملوند اول به false ارزیابی شود به عملوند اول تخصیص می دهد - به طور موثر "اگر عملوند اول نادرست است، به جای آن مقدار عملوند دوم را به آن اختصاص دهید:"

let myVariable = false;
myVariable
||= 2 + 2;
> 4

myVariable
= true;
myVariable
||= 2 + 2;
> true

درک خود را بررسی کنید

کدام عملگر "کاملا برابر" را نشان می دهد؟

===
=
==
!=