➕ العمليات الحسابية الأساسية والمتقدمة
JavaScript تدعم جميع العمليات الحسابية الأساسية التي تعرفها من الرياضيات. لكن هناك بعض الفروق الدقيقة التي يجب فهمها لتجنب الأخطاء.
العمليات الأساسية
let a = 10;
let b = 3;
console.log(a + b);
console.log(a - b);
console.log(a * b);
console.log(a / b);
console.log(a % b);
console.log(a ** b);
عمليات الزيادة والنقصان (Increment/Decrement)
هذه العمليات مختصرة لزيادة أو إنقاص قيمة المتغير بمقدار 1. الفرق بين ++x و x++ مهم جداً:
let x = 5;
console.log(x++);
console.log(x);
let y = 5;
console.log(++y);
| العملية |
الرمز |
المثال |
النتيجة |
| الجمع | + | 5 + 3 | 8 |
| الطرح | - | 5 - 3 | 2 |
| الضرب | * | 5 * 3 | 15 |
| القسمة | / | 10 / 3 | 3.333... |
| باقي القسمة | % | 10 % 3 | 1 |
| الأس | ** | 2 ** 3 | 8 |
⚠️ فخ الجمع مع النصوص:
"5" + 3 = "53" (string) — لأن + مع string يُجرى concatenation. لكن "5" - 3 = 2 (number) — لأن الطرح لا يعمل إلا مع أرقام فيحوّل النص تلقائياً.
📝 عمليات الإسناد المركبة
بدلاً من كتابة x = x + 5، يمكنك استخدام الإسناد المركب x += 5. هذه الطريقة أقصر وأنظف:
let score = 10;
score += 5;
score -= 3;
score *= 2;
score /= 4;
score %= 4;
🔀 عمليات المقارنة: == vs ===
عمليات المقارنة تُرجع true أو false وتُستخدم في جمل الشرط. الفرق بين == و === هو من أهم المفاهيم في JavaScript.
الفرق الجوهري: Loose Equality vs Strict Equality
5 == "5";
0 == false;
"" == false;
null == undefined;
5 === "5";
0 === false;
null === undefined;
| العامل |
الاسم |
يقارن |
يحوّل النوع |
متى تستخدم |
== |
Loose Equality |
القيمة فقط |
✓ نعم |
❌ تجنبها |
=== |
Strict Equality |
القيمة + النوع |
✗ لا |
✓ دائماً |
✅ القاعدة الذهبية:
استخدم === و !== دائماً. == يسبب أخطاء صعبة التتبع بسبب التحويل الضمني الغريب. معظم فرق التطوير تحظر == تماماً باستخدام ESLint.
عمليات المقارنة الأخرى
5 > 3;
5 < 3;
5 >= 5;
5 <= 4;
5 != "5";
5 !== "5";
🔗 العمليات المنطقية: &&, ||, !
العمليات المنطقية تُستخدم لدمج عدة شروط معاً. هي أساسية في بناء أي تطبيق حقيقي.
&& (AND) — "و" المنطقية
تُرجع true فقط إذا كان كلاهما صحيحاً:
let hasID = true;
let isAdult = true;
if (hasID && isAdult) {
console.log("✅ مسموح بالدخول");
} else {
console.log("❌ ممنوع");
}
|| (OR) — "أو" المنطقية
تُرجع true إذا كان واحد على الأقل صحيحاً:
let hasEmail = false;
let hasPhone = true;
if (hasEmail || hasPhone) {
console.log("✅ يمكن التسجيل");
}
! (NOT) — "ليس" المنطقية
تُعكس القيمة المنطقية:
let isBanned = false;
if (!isBanned) {
console.log("✅ المستخدم نشط");
}
console.log(!!"hello");
console.log(!!"");
| A |
B |
A && B |
A || B |
!A |
| true | true | true | true | false |
| true | false | false | true | false |
| false | true | false | true | true |
| false | false | false | false | true |
❓ جمل الشرط if / else if / else
جمل الشرط هي الطريقة الأساسية لجعل البرنامج يتخذ قرارات بناءً على شروط معينة. بدونها، البرنامج سينفذ نفس الكود دائماً.
البنية الأساسية
let age = 18;
if (age >= 18) {
console.log("🧑 بالغ");
} else if (age >= 13) {
console.log("👦 مراهق");
} else {
console.log("👶 طفل");
}
جملة if متداخلة (Nested if)
أحياناً تحتاج لفحص شرط داخل شرط آخر:
let isLoggedIn = true;
let isAdmin = false;
if (isLoggedIn) {
console.log("مرحباً بالمستخدم");
if (isAdmin) {
console.log("🛡️ لوحة التحكم متاحة");
} else {
console.log("👤 صفحة المستخدم العادي");
}
} else {
console.log("🔒 يرجى تسجيل الدخول");
}
🎯 الشرط المختصر Ternary Operator
عندما يكون الشرط بسيطاً (قيمتان فقط)، يمكنك استخدام Ternary Operator كبديل مختصر لـ if/else:
let status;
if (age >= 18) {
status = "بالغ";
} else {
status = "قاصر";
}
let status = age >= 18 ? "بالغ" : "قاصر";
let category = age < 13 ? "طفل" : age < 20 ? "مراهق" : "بالغ";
⚠️ تحذير:
لا تستخدم Ternary متداخلة معقدة — تصبح صعبة القراءة. إذا احتجت أكثر من مستوى واحد، استخدم if/else العادي.
🔄 جملة switch كبديل لـ if المتعدد
عندما تُقارن نفس المتغير بقيم متعددة، switch أنظف وأوضح من سلسلة if/else if:
let day = "السبت";
switch (day) {
case "السبت":
console.log("📅 بداية الأسبوع");
break;
case "الجمعة":
console.log("🎉 عطلة نهاية الأسبوع");
break;
case "الأحد":
case "الاثنين":
case "الثلاثاء":
case "الأربعاء":
case "الخميس":
console.log("💼 يوم عمل");
break;
default:
console.log("❓ يوم غير معروف");
}
❌ خطأ شائع خطير:
نسيان break يسبب fall-through — ينفذ كل الحالات التالية حتى يجد break! هذا من أشهر أخطاء المبتدئين.
🎭 القيم Truthy و Falsy
في JavaScript، أي قيمة يمكن تحويلها إلى boolean. القيم التالية تعتبر falsy (تُعامل كـ false):
false
0
""
null
undefined
NaN
"hello"
42
[]
{}
"0"
let username = "";
if (!username) {
console.log("⚠️ يرجى إدخال اسم المستخدم");
}
let displayName = username || "زائر";
💼 أمثلة واقعية من التطبيقات
هذه أمثلة من تطبيقات حقيقية تستخدم العمليات الحسابية والشروط:
1. حساب الخصم في متجر إلكتروني
function calculatePrice(price, quantity, isMember) {
let total = price * quantity;
if (isMember) {
total = total * 0.8;
}
if (quantity >= 5) {
total = total * 0.9;
}
return total.toFixed(2);
}
console.log(calculatePrice(100, 3, true));
console.log(calculatePrice(100, 6, false));
2. التحقق من صحة نموذج التسجيل
function validateForm(email, password, confirmPassword) {
if (!email || !password) {
return "❌ جميع الحقول مطلوبة";
}
if (!email.includes("@")) {
return "❌ بريد إلكتروني غير صالح";
}
if (password.length < 8) {
return "❌ كلمة المرور يجب أن تكون 8 أحرف على الأقل";
}
if (password !== confirmPassword) {
return "❌ كلمتا المرور غير متطابقتين";
}
return "✅ التسجيل ناجح!";
}
🚀 الخطوة التالية: الحلقات (Loops)
في الدرس الرابع، ستتعلم كيف تكرر العمليات باستخدام:
- 🔄 for loop: تكرار بعدد محدد
- 🔄 while loop: تكرار حتى تحقق شرط
- 🔄 for...of: تكرار عناصر المصفوفة
- 🔄 break و continue: التحكم في التكرار