عملگرهای مقایسه مقادیر دو عملوند را با هم مقایسه می کنند و 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
درک خود را بررسی کنید
کدام عملگر "کاملا برابر" را نشان می دهد؟
!=
===
=
==