فصل ۴: عملگرها و عبارتها در جاوااسکریپت

مقدمه
در تمام برنامههای جاوااسکریپت، عملگرها (Operators) کلیدیترین ابزار انجام پردازش و منطق هستند. با استفاده از عملگرها میتوان عملیات ریاضی، مقایسه، منطق، نسبتدهی یا حتی انجام شرطها را به سادگی اجرا کرد. این فصل، شناخت عمیق و عملی همه عملگرهای مهم جاوااسکریپت و نکات حیاتی هرکدام را به شما میآموزد و با مثالهای کاربردی، اشتباهات مبتدیها را نیز بررسی میکند. با یادگیری این مفاهیم، مهارت کدنویسی شما بسیار افزایش خواهد یافت.
عملگرهای ریاضی (Arithmetic Operators)
عملگرهای ریاضی، اجازه انجام کلیه عملیات اصلی ریاضی را روی دادههای عددی میدهند.
| عملگر | معنی | مثال | خروجی مثال |
|---|---|---|---|
| + | جمع | 5 + 2 | 7 |
| – | تفریق | 8 – 3 | 5 |
| * | ضرب | 4 * 2 | 8 |
| / | تقسیم | 10 / 2 | 5 |
| % | باقیمانده تقسیم | 7 % 3 | 1 |
| ** | توان | 2 ** 3 | 8 |
| ++ | افزایش ۱ واحد | x++ (x=5) | 6 (بعدافزایش) |
| — | کاهش ۱ واحد | y– (y=3) | 2 (بعدکاهش) |
نمونه کد ریاضی:
let a = 5;
let b = 2;
console.log(a + b); // 7
console.log(a % b); // 1
a++;
console.log(a); // 6
نکته:
- ++a با a++ تفاوت عملی دارند (اول تغییر، بعد استفاده vs ابتدا استفاده، بعد تغییر).
عملگرهای مقایسهای (Comparison Operators)
برای بررسی شباهت یا تفاوت و رابطه مقادیر، عملگرهای مقایسهای استفاده میشوند. خروجی این عملگرها همیشه یک مقدار بولین (true یا false) است.
| عملگر | معنی | مثال | خروجی مثال |
|---|---|---|---|
| == | مساوی (فقط مقدار، نوع مهم نیست) | 5 == ‘5’ | true |
| === | هم مقدار و هم نوع یکسان | 5 === ‘5’ | false |
| != | نابرابر | 5 != 7 | true |
| !== | نابرابر یا هم نوع نیست | 5 !== ‘5’ | true |
| > | بزرگتر | 8 > 3 | true |
| < | کوچکتر | 1 < 4 | true |
| >= | بزرگتر یا مساوی | 5 >= 5 | true |
| <= | کوچکتر یا مساوی | 3 <= 2 | false |
نمونه کد مقایسهای:
console.log(5 == '5'); // true (نوع داده را چک نمیکند)
console.log(5 === '5'); // false (هم نوع هم مقدار)
console.log(6 > 3); // true
console.log(8 <= 7); // false
console.log(10 != 12); // true
console.log(12 !== '12'); // true
توصیه:
همیشه از === و !== استفاده کنید تا خطاهای پنهان نداشته باشید (بررسی نوع داده مهم است).
عملگرهای منطقی (Logical Operators)
برای کار با چند شرط و وضعیت، ترکیب شرطها و منطق بولین نیاز به این عملگرهاست. در شرطهای if و حلقهها کاربرد بسیاری دارند.
| عملگر | معنی | مثال | خروجی مثال |
|---|---|---|---|
| && | و | true && false | false |
| || | یا | true || false | true |
| ! | نقیض | !false | true |
نمونه کد منطقی:
console.log(4 > 2 && 7 < 10); // true (هر دو درست)
console.log(6 < 4 || 5 === 5); // true (یکی کافی است)
console.log(!true); // false
کاربرد در شرطها:
let age = 20;
let isMember = true;
if (age >= 18 && isMember) {
console.log("دسترسی دارید.");
}
عملگرهای نسبتدهی (Assignment Operators)
این عملگرها علاوه بر نسبت دادن ساده، امکان تغییر مقدار متغیر براساس مقدار فعلی را نیز میدهند (جمع، ضرب و …).
| عملگر | توضیح | مثال (x=5) | نتیجه نهایی x |
|---|---|---|---|
| = | مقداردهی | x = 8 | x = 8 |
| += | جمع و مقداردهی | x += 2 | x = 7 |
| -= | تفریق و مقداردهی | x -= 1 | x = 4 |
| *= | ضرب و مقداردهی | x *= 3 | x = 15 |
| /= | تقسیم و مقداردهی | x /= 5 | x = 1 |
| %= | مدول و مقداردهی | x %= 4 | x = 1 |
| **= | توان و مقداردهی | x **= 2 | x = 25 |
کد نمونه نسبتدهی:
let x = 5;
x += 2; // x حالا برابر 7 است
x *= 3; // x حالا برابر 21 است
x -= 5; // x حالا برابر 16 است
عملگرهای خاص و پیشرفته در جاوااسکریپت
۱. ++ و — (افزایش و کاهش سریع)
- پیشوند:
let k = 3;
++k; // اول افزایش، بعد استفاده: k=4
- پسوند:
let n = 3;
n++; // اول استفاده، بعد افزایش: مقدار n در این خط 3 است ولی بعد آن 4 میشود.
تفاوت ++a و a++ چیست؟
| وضعیت | ++a | a++ |
|---|---|---|
| ترتیباستفاده | اول افزایش، بعد استفاده | اول استفاده، بعد افزایش |
۲. typeof (بررسی نوع داده)
- نوع هر مقدار یا متغیر را برمیگرداند.
console.log(typeof 5); // "number"
console.log(typeof "JS"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof [1,2,3]); // "object" (آرایه!)
console.log(typeof {name:"Ali"}); // "object"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"
نکته سئو: از typeof زیاد برای بررسی نوع داده در کدها و دیباگ استفاده میشود.
۳. عملگر شرطی (Ternary Operator)
- سادهترین جایگزین if/else است و در تعیین متغیرهای ساده یا تصمیمهای جمعوجور مفید است.
let age = 18;
let status = (age >= 18) ? "بالغ" : "نابالغ";
console.log(status); // بالغ
ساختار کلی:
شرط ? مقدار_درست : مقدار_غلط;
۴. عملگر کوآلسینگ ?? و عملگر اختیاری زنجیرهای ?. (پیشرفته)
این دو در ES2020 به بعد اضافه شدهاند.
- ?? مقدار سمت راست را تنها زمانی جایگزین میکند که سمت چپ null یا undefined باشد.
- ?. برای دسترسی مطمئن به ویژگی آبجکت یا تابعی که ممکن است وجود نداشته باشد:
let val = undefined;
console.log(val ?? "پیش فرض"); // "پیش فرض"
let user = null;
console.log(user?.name); // undefined بدون ارور
۵. عملگر delete و typeof
- delete برای حذف ویژگی از آبجکت:
let obj = {x:1, y:2};
delete obj.x;
console.log(obj); // {y:2}
عبارتها (Expressions) چیست؟
عبارت یا Expression: هر ترکیبی از متغیرها، عملگرها، مقادیر یا توابع که یک مقدار تولید میکند (در مقابل Statement).
به طور مثال:
let sum = 5 + 3 * 2; // sum یک عبارت است
let isAdult = (age >= 18); // یک عبارت منطقی است
عبارت حتی میتواند یک فراخوانی تابع یا مقدار بازگشتی باشد:
let upper = "ali".toUpperCase(); // عبارت خروجی toUpperCase
اشتباهات رایج در استفاده از عملگرها
- اشتباه گرفتن == و ===
==فقط مقدار را بررسی میکند (ممکن است نوع داده را تبدیل کند).===مقدار و نوع داده هر دو باید یکسان باشند.- همیشه از
===استفاده کنید.
- استفاده بیش از حد یا نابجای ++ و —
- مثلاً استفاده در جای نامناسب و فهم اشتباه فرق پیشوند/پسوند.
- تنها استفاده از typeof برای شناسایی آرایهها
- typeof برای آرایه هم مقدار “object” میدهد. برای اینکه مطمئن شوید متغیر یک آرایه است:
js Array.isArray(myVar); // true فقط اگر آرایه باشد
- نوشتن = به جای == یا ===
a = 4مقدار نسبت میدهد ولیa == 4مقایسه میکند. اشتباه متداول!
- اعمال عملگر به انواع ناسازگار
- مثل ضرب رشته و عدد یا جمع عدد و ابجکت بدون تبدیل مناسب.
تمرین و مثال عملی
تمرین ۱: چند مثال از هر نوع عملگر بنویس و خروجی را در Console نمایش بده.
// عملگرهای ریاضی
let x = 6, y = 3;
console.log(x * y); // 18
console.log(x / y); // 2
// عملگرهای مقایسه
console.log(10 == "10"); // true
console.log(10 === "10"); // false
// عملگرهای منطقی
let a = 5, b = 9;
console.log(a < 10 && b > 7); // true
console.log(!(a > b)); // true
// عملگرهای نسبتدهی
let count = 10;
count /= 2;
console.log(count); // 5
// typeof
console.log(typeof a); // number
console.log(typeof "Azar"); // string
// عملگر شرطی (ternary)
let score = 15;
let result = (score >= 10) ? "قبولی" : "مردودی";
console.log(result); // قبولی
تمرین ۲: دریافت سن کاربر و تعیین وضعیت با ternary operator
let userAge = prompt("سن خود را وارد کنید:");
userAge = Number(userAge);
let ageStatus = (userAge >= 18) ? "بالغ هستید" : "نابالغ هستید";
alert(ageStatus);
توجه: prompt و alert فقط در محیط مرورگر کار میکنند.
منابع تکمیلی
جمعبندی فصل چهارم
در این فصل با:
- انواع عملگرهای ریاضی، مقایسهای، منطقی و نسبتدهی،
- عملگرهای خاص (typeof، ternary و …)
- مفاهیم اساسی عبارات و خطاهای رایج،
- و تمرین و مثال عملی برای تسلط بهتر آشنا شدیم.
در فصل بعد، وارد بحث ساختارهای کنترلی (if، switch، حلقهها) و جریان اجرای برنامه در جاوااسکریپت خواهیم شد.
اگر پرسشی داشتی یا مثال دیگری خواستی همینجا بپرس و تمرینها را حتماً در Console مرورگر تست کن!