عملگرها و عبارتها
عملگرهای حسابی، انتساب، مقایسهای، منطقی، بیتی، شرطی، Nullish Coalescing و Optional Chaining
عملگر چیست؟
عملگر (Operator) نمادی است که روی یک یا چند عملوند (Operand) عملیاتی انجام میدهد و نتیجهای تولید میکند. جاوا اسکریپت عملگرهای متنوعی دارد که به دستههای زیر تقسیم میشوند.
عملگرهای حسابی (Arithmetic)
برای انجام عملیات ریاضی استفاده میشوند:
| عملگر | نام | مثال | نتیجه |
|---|---|---|---|
+ | جمع | 5 + 3 | 8 |
- | تفریق | 5 - 3 | 2 |
* | ضرب | 5 * 3 | 15 |
/ | تقسیم | 5 / 2 | 2.5 |
% | باقیمانده | 5 % 2 | 1 |
** | توان | 2 ** 3 | 8 |
++ | افزایش | x++ | x را یک زیاد میکند |
-- | کاهش | x-- | x را یک کم میکند |
تفاوت ++x و x++
let x = 5;
console.log(x++); // 5 (اول مقدار، بعد افزایش)
console.log(x); // 6
let y = 5;
console.log(++y); // 6 (اول افزایش، بعد مقدار)
عملگرهای انتساب (Assignment)
برای اختصاص مقدار به متغیر:
| عملگر | مثال | معادل |
|---|---|---|
= | x = 5 | — |
+= | x += 3 | x = x + 3 |
-= | x -= 3 | x = x - 3 |
*= | x *= 3 | x = x * 3 |
/= | x /= 3 | x = x / 3 |
%= | x %= 3 | x = x % 3 |
**= | x **= 3 | x = x ** 3 |
عملگرهای مقایسهای (Comparison)
دو مقدار را مقایسه کرده و true یا false برمیگردانند:
| عملگر | نام | مثال | نتیجه |
|---|---|---|---|
== | مساوی (با تبدیل نوع) | 5 == "5" | true |
=== | مساوی سختگیرانه | 5 === "5" | false |
!= | نامساوی | 5 != "5" | false |
!== | نامساوی سختگیرانه | 5 !== "5" | true |
> | بزرگتر | 5 > 3 | true |
< | کوچکتر | 5 < 3 | false |
>= | بزرگتر مساوی | 5 >= 5 | true |
<= | کوچکتر مساوی | 5 <= 3 | false |
عملگرهای منطقی (Logical)
با مقادیر بولی کار میکنند:
| عملگر | نام | مثال | نتیجه |
|---|---|---|---|
&& | AND | true && false | false |
|| | OR | true || false | true |
! | NOT | !true | false |
ارزیابی کوتاهمدار (Short-Circuit)
عملگرهای منطقی تا وقتی به نتیجه برسند ادامه میدهند و مقدار آخرین عملوند ارزیابیشده را برمیگردانند:
// AND: اگر اولی falsy باشد همان برگردانده میشود
console.log(0 && "سلام"); // 0
console.log("اول" && "دوم"); // "دوم"
// OR: اگر اولی truthy باشد همان برگردانده میشود
console.log("اول" || "دوم"); // "اول"
console.log(null || "پیشفرض"); // "پیشفرض"
عملگرهای بیتی (Bitwise)
روی بیتهای باینری اعداد کار میکنند:
| عملگر | نام | مثال (باینری) | ||
|---|---|---|---|---|
& | AND | 5 & 3 = 1 (0101 & 0011 = 0001) | ||
| | OR | 5 | 3 = 7 (0101 | 0011 = 0111) | ||
^ | XOR | 5 ^ 3 = 6 (0101 ^ 0011 = 0110) | ||
~ | NOT | ~5 = -6 | ||
<< | شیفت چپ | 5 << 1 = 10 | ||
>> | شیفت راست | 5 >> 1 = 2</td></tr>
<tr><td><code>>>> | شیفت راست بدون علامت | -5 >>> 1 = 2147483645 |
عملگر شرطی (Ternary)
تنها عملگر با سه عملوند — نسخه فشرده if/else:
const age = 20;
const status = age >= 18 ? "بزرگسال" : "کودک";
console.log(status); // "بزرگسال"
عملگر تهی (Nullish Coalescing — ??)
از ES2020 اضافه شد. فقط وقتی مقدار null یا undefined باشد مقدار پیشفرض برمیگرداند:
const name = null ?? "مهمان"; // "مهمان"
const count = 0 ?? 10; // 0 (چون 0 تهی نیست!)
const text = "" ?? "پیشفرض"; // "" (رشته خالی تهی نیست!)
تفاوت با ||: عملگر || تمام مقادیر falsy را رد میکند اما ?? فقط null و undefined:
0 || 10; // 10 (0 falsy است)
0 ?? 10; // 0 (0 تهی نیست)
"" || "متن"; // "متن"
"" ?? "متن"; // ""
زنجیره اختیاری (Optional Chaining — ?.)
از ES2020 — دسترسی امن به ویژگیهای تو در تو بدون خطا:
const user = { profile: { name: "علی" } };
// روش قدیمی:
const city = user && user.profile && user.profile.city;
// اگر هر کدام undefined باشد خطا میدهد
// با Optional Chaining:
const city2 = user?.profile?.city; // undefined (بدون خطا)
const zip = user?.address?.zip; // undefined
// با فراخوانی تابع:
user.sayHi?.(); // اگر وجود نداشته باشد خطا نمیدهد
عملگرهای یکانی (Unary)
عملگرهایی که فقط یک عملوند دارند:
+x // تبدیل به عدد
-x // منفی کردن
!x // نقیض بولی
typeof x // نوع داده
++x / x++ // افزایش
--x / x-- // کاهش
تقدم عملگرها (Operator Precedence)
وقتی چند عملگر در یک عبارت باشند، جاوا اسکریپت بر اساس تقدم آنها را اجرا میکند:
let result = 2 + 3 * 4; // 14 (اول ضرب)
let result2 = (2 + 3) * 4; // 20 (پرانتز تقدم دارد)
تقدم از بالا به پایین:
()— پرانتز++ -- !— یکانی**— توان* / %— ضرب و تقسیم+ -— جمع و تفریق< > <= >=— مقایسه== != === !==— تساوی&&— AND||— OR??— Nullish= += -=— انتساب (کمترین تقدم)
جمعبندی
- عملگرهای حسابی برای ریاضیات، مقایسهای برای شرطها
- همیشه از === به جای == استفاده کنید
- ?? فقط برای null/undefined و || برای falsy
- ?. دسترسی امن به ویژگیهای تو در تو
- پرانتز تقدم را تغییر میدهد — برای خوانایی استفاده کنید
این مبحث بخشی از دوره آموزش کامل جاوا اسکریپت است.