السبت - الخميس: 10:00 ص - 10:00 م

تعلم JavaScript للمبتدئين: دليل شامل لفهم JavaScript من الصفر مع أمثلة عملية

تعلم JavaScript من الصفر خطوة بخطوة. دليل شامل للمبتدئين يشرح المتغيرات، Functions، Arrays، DOM، Events، Promises، APIs، مع مشاريع عملية مثل Calculator وTo-Do List.

تعلم JavaScript للمبتدئين: دليل شامل لفهم JavaScript من الصفر مع أمثلة عملية

تعلم JavaScript للمبتدئين: دليل شامل لفهم JavaScript من الصفر مع أمثلة عملية

خلصت HTML وCSS وبدأت JavaScript، وفجأة لقيت حاجات زي let وconst وfunction وarray وDOM وPromise وAPI ومش عارف تبدأ منين؟ ده طبيعي جدًا — JavaScript واحدة من أكتر اللغات استخدامًا في العالم، وفيها مفاهيم كتير ممكن تبان معقدة في البداية.

المقال ده هيكون مرجع شامل يأخدك من أساسيات JavaScript (المتغيرات والدوال والمصفوفات) لحد التعامل مع DOM وEvents، وبناء مشاريع عملية مثل Calculator وTo-Do List، وصولًا لفهم Promises وAsync/Await وAPIs.

الأهم من حفظ الأكواد هو فهم المفاهيم. ولو فهمت الأساسيات صح — كل حاجة بعد كده هتبقى أسهل.

⚡ الإجابة السريعة: يعني إيه JavaScript؟

JavaScript هي لغة برمجة تُستخدم لإضافة التفاعل والسلوك الديناميكي إلى صفحات الويب — مثل الأزرار اللي بتشتغل، القوائم اللي بتفتح، والبيانات اللي بتتحدث بدون ما الصفحة تتحمل من جديد. كمان تُستخدم في Server-Side Development باستخدام Node.js، وفي تطبيقات الموبايل والـ Desktop.

1. يعني إيه JavaScript؟

ما هي JavaScript؟

JavaScript هي لغة برمجة تُستخدم لإضافة التفاعل والسلوك الديناميكي إلى صفحات ومواقع الويب. ظهرت سنة 1995 وتطورت لتصبح واحدة من أكثر لغات البرمجة استخدامًا في العالم. تعمل في المتصفح مباشرة، ويمكن استخدامها أيضًا في Server-Side باستخدام Node.js.

أين تُستخدم JavaScript؟

  • Front-End: التفاعل مع صفحات الويب (أزرار، قوائم، حركات، تحقق من البيانات).
  • Back-End: بناء سيرفرات باستخدام Node.js.
  • Mobile Apps: باستخدام React Native أو Ionic.
  • Desktop Apps: باستخدام Electron.

HTML وCSS وJavaScript — إيه دور كل واحدة؟

التقنيةالوظيفةالتشبيه
HTMLStructure — هيكل الصفحةالعظام والهيكل
CSSStyling — تصميم وشكل الصفحةالملابس والمظهر
JavaScriptBehavior & Interactivity — التفاعل والسلوكالعقل والحركة

هل JavaScript هي نفسها Java؟

لا. JavaScript وJava لغتان مختلفتان تمامًا في التصميم والاستخدام. الاسم المتشابه سببه تاريخي فقط.

مثال بسيط

// عند الضغط على الزر، تظهر رسالة
document.querySelector("#myBtn").addEventListener("click", function() {
  alert("مرحبًا بك في JavaScript!");
});

هذا الكود يبحث عن زر بـ id="myBtn"، ولما المستخدم يضغط عليه، تظهر رسالة ترحيبية.

2. الفرق بين var وlet وconst

ما الفرق بين var وlet وconst في JavaScript؟

var هي الطريقة القديمة لتعريف المتغيرات (Function Scope)، let هي الطريقة الحديثة لتعريف متغير قابل للتغيير (Block Scope)، وconst لتعريف متغير ثابت لا يمكن إعادة تعيينه (Block Scope). في JavaScript الحديثة، يُفضل استخدام const كخيار أول وlet عند الحاجة للتغيير.

جدول مقارنة

الخاصيةvarletconst
ScopeFunction ScopeBlock ScopeBlock Scope
إعادة التعيين (Reassignment)✅ نعم✅ نعم❌ لا
إعادة التعريف (Redeclaration)✅ نعم❌ لا❌ لا
Hoisting✅ (يرفع بـ undefined)✅ (لكن في TDZ)✅ (لكن في TDZ)
الاستخدام في 2024+❌ تجنبه✅ للمتغيرات المتغيرة✅ الخيار الأول

أمثلة

// const — ثابت، لا يتغير
const PI = 3.14;
// PI = 3.15; // ❌ Error

// let — متغير، يمكن تغييره
let score = 0;
score = 10; // ✅ شغال

// var — قديم، تجنبه
var name = "Ahmed";
var name = "Ali"; // ✅ شغال (وده مشكلة!)

💡 القاعدة: استخدم const دائمًا. لو احتجت تغيّر القيمة، استخدم let. لا تستخدم var في المشاريع الحديثة.

3. الفرق بين == و===

ما الفرق بين == و=== في JavaScript؟

== (Loose Equality) يقارن القيمة فقط مع تحويل النوع تلقائيًا (Type Coercion)، بينما === (Strict Equality) يقارن القيمة والنوع معًا بدون تحويل. يُفضل استخدام === في معظم الحالات لتجنب نتائج غير متوقعة.

أمثلة

// == (Loose Equality) — يحول النوع تلقائيًا
5 == "5"     // true  ← حوّل "5" لرقم ثم قارن
0 == false   // true  ← حوّل false لـ 0 ثم قارن
null == undefined // true

// === (Strict Equality) — يقارن القيمة + النوع
5 === "5"    // false ← رقم ≠ نص
0 === false  // false ← رقم ≠ boolean
null === undefined // false

مقارنة

المعيار=====
المقارنةالقيمة فقطالقيمة + النوع
Type Coercion✅ يحول النوع❌ لا يحول
الاستخدام المفضلحالات نادرة✅ الخيار الافتراضي

💡 القاعدة: استخدم === دائمًا، إلا إذا كنت متأكدًا إنك محتاج == لسبب محدد.

4. يعني إيه Function؟

ما هي Function في JavaScript؟

Function هي كتلة كود قابلة لإعادة الاستخدام، تنفذ مهمة محددة عند استدعائها. تأخذ مدخلات (Parameters)، تنفذ عمليات، وتُرجع نتيجة (Return). Functions تساعد في تنظيم الكود، تقليل التكرار، وتسهيل الصيانة.

Function Declaration

// تعريف Function
function greet(name) {
  return "مرحبًا يا " + name + "!";
}

// استدعاء Function
const message = greet("Ahmed");
console.log(message); // "مرحبًا يا Ahmed!"

Function Expression

const add = function(a, b) {
  return a + b;
};

console.log(add(5, 3)); // 8

المفاهيم الأساسية

المفهومالمعنىمثال
Parameterالمتغير في تعريف الـ Functionfunction greet(name)name هو Parameter
Argumentالقيمة الفعلية عند الاستدعاءgreet("Ahmed")"Ahmed" هو Argument
Returnالقيمة اللي بترجعها الـ Functionreturn a + b;

ليه نستخدم Functions؟

  • إعادة الاستخدام: تكتب الكود مرة واحدة وتستدعيه وقت ما تحتاج.
  • تنظيم الكود: تقسّم المشروع لأجزاء صغيرة ومفهومة.
  • تقليل التكرار: بدل ما تكرر نفس الكود 10 مرات، تكتبه مرة في Function.

5. الفرق بين Function وArrow Function

ما الفرق بين Regular Function وArrow Function؟

Arrow Function هي طريقة مختصرة لكتابة Functions في ES6+. الفرق الأساسي إن Arrow Function لا تملك this خاص بها (تأخذ this من السياق المحيط)، ولا تملك arguments object. في أغلب الحالات اليومية، الاتنين يعملوا نفس الحاجة.

المقارنة

// Regular Function
function add(a, b) {
  return a + b;
}

// Arrow Function
const add = (a, b) => a + b;

// Arrow Function (سطر واحد = return ضمني)
const double = (n) => n * 2;

جدول المقارنة

المعيارRegular FunctionArrow Function
Syntaxfunction name() {}const name = () => {}
thisيعتمد على كيفية الاستدعاءيأخذ this من السياق المحيط
arguments✅ متاح❌ غير متاح
الاستخدام الشائعMethods داخل ObjectsCallbacks, Array Methods

💡 نصيحة: استخدم Arrow Functions في Callbacks (مثل map, filter, addEventListener). استخدم Regular Functions كـ Methods داخل Objects أو Classes.

6. يعني إيه Array؟

ما هي Array في JavaScript؟

Array هي هيكل بيانات يُخزّن مجموعة من القيم في متغير واحد مرتب بـ Index (فهرس) يبدأ من 0. تُستخدم لتخزين قوائم مثل أسماء المستخدمين، المنتجات، أو المهام. يمكن إضافة وحذف وتعديل العناصر.

إنشاء Array

const users = ["Ali", "Ahmed", "Mohamed"];

// الوصول إلى عنصر — Index يبدأ من 0
console.log(users[0]); // "Ali"
console.log(users[1]); // "Ahmed"
console.log(users[2]); // "Mohamed"

// عدد العناصر
console.log(users.length); // 3

7. إزاي أضيف عنصر للـ Array؟

كيفية إضافة وحذف عناصر من Array

لإضافة عنصر في نهاية Array استخدم push()، ولإضافة في البداية استخدم unshift(). لحذف من النهاية استخدم pop()، ومن البداية shift(). ولإضافة أو حذف في أي موضع، استخدم splice().

إضافة عناصر

const fruits = ["Apple", "Banana"];

// إضافة في النهاية
fruits.push("Orange");
// ["Apple", "Banana", "Orange"]

// إضافة في البداية
fruits.unshift("Mango");
// ["Mango", "Apple", "Banana", "Orange"]

// إضافة في موضع محدد (Index 2)
fruits.splice(2, 0, "Grape");
// ["Mango", "Apple", "Grape", "Banana", "Orange"]

حذف عناصر

const colors = ["Red", "Green", "Blue", "Yellow"];

// حذف من النهاية
colors.pop();       // يحذف "Yellow"

// حذف من البداية
colors.shift();     // يحذف "Red"

// حذف من موضع محدد (Index 1, عنصر واحد)
colors.splice(1, 1); // يحذف "Blue"

ملخص سريع

Methodالوظيفةالموضع
push()إضافةالنهاية
unshift()إضافةالبداية
pop()حذفالنهاية
shift()حذفالبداية
splice()إضافة / حذفأي موضع

8. الفرق بين map وfilter وforEach

ما الفرق بين map وfilter وforEach في JavaScript؟

map() تُحوّل كل عنصر وتُرجع Array جديدة. filter() تُصفّي العناصر حسب شرط وتُرجع Array جديدة. forEach() تنفذ عملية لكل عنصر بدون إرجاع Array جديدة.

جدول المقارنة

Methodالوظيفةترجع Array جديدة؟الاستخدام
map()تحويل كل عنصر✅ نعمتحويل البيانات
filter()تصفية حسب شرط✅ نعمفلترة البيانات
forEach()تنفيذ عملية لكل عنصر❌ لاSide Effects (طباعة، تعديل DOM)

أمثلة عملية (نفس الـ Array)

const numbers = [1, 2, 3, 4, 5, 6];

// map — مضاعفة كل رقم
const doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6, 8, 10, 12]

// filter — الأرقام الزوجية فقط
const evens = numbers.filter(n => n % 2 === 0);
console.log(evens); // [2, 4, 6]

// forEach — طباعة كل رقم
numbers.forEach(n => console.log(n));
// 1, 2, 3, 4, 5, 6

9. يعني إيه Object؟

ما هو Object في JavaScript؟

Object هو هيكل بيانات يُخزّن مجموعة من الخصائص (Properties) على شكل أزواج Key-Value. كل Property لها اسم (Key) وقيمة (Value). القيمة يمكن أن تكون نص، رقم، Array، Function (تسمى Method)، أو حتى Object آخر.

مثال

const user = {
  name: "Ahmed",
  age: 22,
  job: "Developer",
  skills: ["HTML", "CSS", "JavaScript"],
  greet: function() {
    return "مرحبًا، أنا " + this.name;
  }
};

// الوصول بـ Dot Notation
console.log(user.name);    // "Ahmed"
console.log(user.age);     // 22

// الوصول بـ Bracket Notation
console.log(user["job"]);  // "Developer"

// استدعاء Method
console.log(user.greet()); // "مرحبًا، أنا Ahmed"

المفاهيم الأساسية

المفهومالمعنىمثال
Propertyخاصية (Key + Value)name: "Ahmed"
Valueقيمة الخاصية"Ahmed", 22
MethodFunction داخل Objectgreet: function() {}
Dot Notationالوصول بنقطةuser.name
Bracket Notationالوصول بأقواسuser["name"]

10. إيه هو DOM؟

ما هو DOM في JavaScript؟

DOM (Document Object Model) هو الواجهة البرمجية التي يوفرها المتصفح لتحويل صفحة HTML إلى شجرة كائنات (Tree of Objects) يمكن لـ JavaScript التعامل معها. من خلال DOM، تقدر تضيف عناصر، تحذف عناصر، تغيّر محتوى، وتغيّر تنسيق CSS — كل ده بـ JavaScript.

كيف يعمل DOM؟

لما المتصفح يحمّل صفحة HTML، بيحوّلها لـ شجرة (Tree) من الكائنات. كل عنصر HTML بيبقى كائن (Node) في الشجرة. JavaScript بتتعامل مع الشجرة دي — مش مع كود HTML مباشرة.

أساسيات التعامل مع DOM

// اختيار عنصر واحد
const title = document.querySelector("h1");
const btn = document.querySelector("#myBtn");
const card = document.querySelector(".card");

// اختيار كل العناصر المطابقة
const items = document.querySelectorAll(".item");

// اختيار بـ ID
const header = document.getElementById("header");

أشهر Methods للتعامل مع DOM

Methodالوظيفة
querySelector()اختيار أول عنصر مطابق لـ CSS Selector
querySelectorAll()اختيار كل العناصر المطابقة
getElementById()اختيار عنصر بـ ID
createElement()إنشاء عنصر HTML جديد
appendChild()إضافة عنصر كابن
remove()حذف عنصر

11. إزاي أغير محتوى HTML بـ JavaScript؟

كيفية تغيير محتوى HTML باستخدام JavaScript

لتغيير محتوى عنصر HTML، استخدم textContent لتغيير النص فقط، أو innerHTML لتغيير HTML كامل بما فيه العناصر. textContent أكثر أمانًا لأنها لا تُنفّذ HTML.

المقارنة

Propertyالوظيفةينفذ HTML؟الأمان
textContentيغير النص فقط❌ لا✅ آمن
innerTextيغير النص المرئي فقط❌ لا✅ آمن
innerHTMLيغير HTML كامل✅ نعم⚠️ حذر مع بيانات المستخدم

مثال

const title = document.querySelector("h1");

// تغيير النص فقط
title.textContent = "مرحبًا بك في JavaScript!";

// تغيير HTML كامل
title.innerHTML = "مرحبًا بك في <strong>JavaScript</strong>!";

⚠️ ملاحظة أمنية: لا تستخدم innerHTML لعرض بيانات من المستخدم مباشرة — لأنها ممكن تنفذ أكواد ضارة (XSS Attack). استخدم textContent للبيانات اللي مصدرها المستخدم.

12. إزاي أغير CSS بـ JavaScript؟

كيفية تغيير CSS باستخدام JavaScript

يمكنك تغيير CSS بطريقتين: (1) element.style.property لتغيير خاصية واحدة مباشرة. (2) element.classList لإضافة أو حذف أو تبديل CSS Classes — وهي الطريقة الأفضل والأنظف.

الطريقة الأولى: style (مباشرة)

const box = document.querySelector(".box");
box.style.backgroundColor = "#667eea";
box.style.color = "#fff";
box.style.padding = "20px";

الطريقة الثانية: classList (الأفضل ✅)

const box = document.querySelector(".box");

// إضافة class
box.classList.add("active");

// حذف class
box.classList.remove("active");

// تبديل class (إضافة لو مش موجود، حذف لو موجود)
box.classList.toggle("active");

// التحقق من وجود class
box.classList.contains("active"); // true أو false

💡 نصيحة: استخدم classList دائمًا لأنها تفصل بين JavaScript وCSS. حدد التنسيقات في ملف CSS بـ class، واستخدم JavaScript فقط لتبديل الـ class.

13. إزاي أعمل Event في JavaScript؟

ما هي Events في JavaScript؟

Events هي أحداث يقوم بها المستخدم (مثل النقر أو الكتابة أو التمرير) يمكن لـ JavaScript الاستماع لها والتفاعل معها. تُستخدم addEventListener() لربط حدث معين بعنصر HTML وتحديد الكود اللي يتنفذ لما الحدث يحصل.

أشهر Events

Eventمتى يحدث
clickعند النقر على عنصر
submitعند إرسال Form
inputعند الكتابة في حقل إدخال
changeعند تغيير قيمة حقل
mouseoverعند مرور الماوس
keydownعند الضغط على مفتاح

مثال: addEventListener

const button = document.querySelector("#myBtn");

button.addEventListener("click", function() {
  console.log("تم الضغط على الزر!");
});

// أو باستخدام Arrow Function
button.addEventListener("click", () => {
  console.log("تم الضغط على الزر!");
});

14. الفرق بين onclick وaddEventListener

ما الفرق بين onclick وaddEventListener؟

onclick هو طريقة قديمة لربط حدث واحد فقط بعنصر (يُلغي أي حدث سابق). addEventListener هي الطريقة الحديثة التي تسمح بإضافة أكثر من Event Listener لنفس العنصر بدون إلغاء السابقين. يُفضل استخدام addEventListener في المشاريع الحديثة.

مقارنة

المعيارonclickaddEventListener
تعدد Events❌ حدث واحد فقط✅ أكثر من حدث
الفصل عن HTML⚠️ أحيانًا يُكتب في HTML✅ في JavaScript فقط
RemoveصعبremoveEventListener
الاستخدام المفضلحالات بسيطة جدًا✅ الخيار الافتراضي
// onclick — حدث واحد فقط
button.onclick = function() {
  console.log("الأول");
};
button.onclick = function() {
  console.log("الثاني"); // ← يُلغي الأول!
};

// addEventListener — أكثر من حدث
button.addEventListener("click", () => console.log("الأول"));
button.addEventListener("click", () => console.log("الثاني"));
// الاتنين هيشتغلوا!

15. إزاي أعمل Dark Mode بـ JavaScript؟

كيفية عمل Dark Mode باستخدام JavaScript

لعمل Dark Mode، أنشئ CSS Class مثل .dark-mode يحتوي على تنسيقات الوضع الداكن، واستخدم classList.toggle() في JavaScript لتبديله عند الضغط على زر. يمكن حفظ اختيار المستخدم باستخدام localStorage.

HTML

<button id="darkBtn">🌙 Dark Mode</button>

CSS

body {
  background-color: #fff;
  color: #1a1a2e;
  transition: background-color 0.3s, color 0.3s;
}

body.dark-mode {
  background-color: #1a1a2e;
  color: #f5f5f5;
}

JavaScript

const darkBtn = document.querySelector("#darkBtn");

darkBtn.addEventListener("click", () => {
  document.body.classList.toggle("dark-mode");
});

حفظ الاختيار بـ localStorage

const darkBtn = document.querySelector("#darkBtn");

// تحميل الاختيار المحفوظ
if (localStorage.getItem("theme") === "dark") {
  document.body.classList.add("dark-mode");
}

darkBtn.addEventListener("click", () => {
  document.body.classList.toggle("dark-mode");

  // حفظ الاختيار
  if (document.body.classList.contains("dark-mode")) {
    localStorage.setItem("theme", "dark");
  } else {
    localStorage.setItem("theme", "light");
  }
});

16. إزاي أعمل Calculator بـ JavaScript؟

كيفية بناء Calculator بسيط بـ JavaScript

لبناء Calculator، تحتاج HTML للأزرار والشاشة، CSS للتنسيق، وJavaScript لمنطق العمليات الحسابية. الفكرة: المستخدم يضغط أزرار ← JavaScript تستقبل المدخلات عبر Events ← تنفذ العملية الحسابية ← تعرض النتيجة.

Architecture بسيطة

Input (ضغط زر)Event (addEventListener)JavaScript Logic (حساب)Result (عرض النتيجة)

HTML (مبسط)

<div class="calculator">
  <input type="text" id="display" disabled>
  <div class="buttons">
    <button class="num">7</button>
    <button class="num">8</button>
    <button class="num">9</button>
    <button class="op">+</button>
    <button class="num">4</button>
    <button class="num">5</button>
    <button class="num">6</button>
    <button class="op">-</button>
    <button class="num">1</button>
    <button class="num">2</button>
    <button class="num">3</button>
    <button class="op">*</button>
    <button class="num">0</button>
    <button id="clear">C</button>
    <button id="equals">=</button>
    <button class="op">/</button>
  </div>
</div>

JavaScript (بدون eval)

const display = document.querySelector("#display");
let firstNum = "";
let operator = "";
let secondNum = "";

// أزرار الأرقام
document.querySelectorAll(".num").forEach(btn => {
  btn.addEventListener("click", () => {
    if (operator === "") {
      firstNum += btn.textContent;
      display.value = firstNum;
    } else {
      secondNum += btn.textContent;
      display.value = secondNum;
    }
  });
});

// أزرار العمليات
document.querySelectorAll(".op").forEach(btn => {
  btn.addEventListener("click", () => {
    operator = btn.textContent;
  });
});

// زر المساواة
document.querySelector("#equals").addEventListener("click", () => {
  const a = parseFloat(firstNum);
  const b = parseFloat(secondNum);
  let result = 0;

  switch(operator) {
    case "+": result = a + b; break;
    case "-": result = a - b; break;
    case "*": result = a * b; break;
    case "/": result = b !== 0 ? a / b : "Error"; break;
  }

  display.value = result;
  firstNum = result.toString();
  operator = "";
  secondNum = "";
});

// زر المسح
document.querySelector("#clear").addEventListener("click", () => {
  firstNum = "";
  operator = "";
  secondNum = "";
  display.value = "";
});

⚠️ لماذا لا نستخدم eval()؟ لأنها تنفذ أي كود كـ JavaScript، وده خطر أمني كبير خصوصًا لو فيه بيانات من المستخدم. الأفضل كتابة المنطق يدويًا.

17. إزاي أعمل To-Do List بـ JavaScript؟

كيفية بناء To-Do List بـ JavaScript

To-Do List مشروع ممتاز للمبتدئين يجمع بين DOM Manipulation، Events، Arrays، وFunctions. المميزات الأساسية: إضافة مهمة، حذف مهمة، تحديد مهمة كمكتملة، وعرض قائمة المهام.

HTML

<div class="todo-app">
  <h2>قائمة المهام</h2>
  <div class="input-group">
    <input type="text" id="taskInput" placeholder="أضف مهمة جديدة...">
    <button id="addBtn">إضافة</button>
  </div>
  <ul id="taskList"></ul>
</div>

JavaScript

const taskInput = document.querySelector("#taskInput");
const addBtn = document.querySelector("#addBtn");
const taskList = document.querySelector("#taskList");
let tasks = [];

// إضافة مهمة
function addTask() {
  const text = taskInput.value.trim();
  if (text === "") return;

  tasks.push({ text, completed: false });
  taskInput.value = "";
  renderTasks();
}

// عرض المهام
function renderTasks() {
  taskList.innerHTML = "";

  tasks.forEach((task, index) => {
    const li = document.createElement("li");
    li.textContent = task.text;

    if (task.completed) {
      li.style.textDecoration = "line-through";
      li.style.opacity = "0.6";
    }

    // زر إكمال
    li.addEventListener("click", () => {
      tasks[index].completed = !tasks[index].completed;
      renderTasks();
    });

    // زر حذف
    const deleteBtn = document.createElement("button");
    deleteBtn.textContent = "✕";
    deleteBtn.addEventListener("click", (e) => {
      e.stopPropagation();
      tasks.splice(index, 1);
      renderTasks();
    });

    li.appendChild(deleteBtn);
    taskList.appendChild(li);
  });
}

// Events
addBtn.addEventListener("click", addTask);
taskInput.addEventListener("keydown", (e) => {
  if (e.key === "Enter") addTask();
});

💡 تطوير المشروع: يمكن إضافة localStorage لحفظ المهام بعد إعادة تحميل الصفحة:

// حفظ
localStorage.setItem("tasks", JSON.stringify(tasks));

// تحميل
tasks = JSON.parse(localStorage.getItem("tasks")) || [];

18. ليه JavaScript مش شغال؟ (Troubleshooting Guide)

لماذا لا يعمل كود JavaScript؟

أشهر الأسباب: خطأ في Syntax، ملف JS غير مربوط بالـ HTML، مسار الملف خاطئ، Selector خاطئ لا يجد العنصر، استخدام متغير قبل تعريفه، أو أن الكود يتنفذ قبل تحميل DOM. أول خطوة دائمًا: افتح Console في DevTools (F12) واقرأ Error Message.

أشهر 12 سببًا

  1. Syntax Error: قوس ناقص أو فاصلة منقوطة غلط.
  2. ملف JS غير مربوط: نسيت <script src="script.js">.
  3. Path خاطئ: مسار الملف غلط.
  4. Selector خاطئ: querySelector مش لاقي العنصر.
  5. اسم Variable خاطئ: حالة الأحرف (Case Sensitivity) مهمة.
  6. استخدام Variable قبل تعريفها: ReferenceError.
  7. Scope Problem: المتغير معرّف في Scope مختلف.
  8. Event غير مربوط: addEventListener مش متحط.
  9. Console Error: فيه Error لكن مش بتقرأه.
  10. DOM مش محمّل: الكود بيتنفذ قبل ما العناصر تتحمل. الحل: ضع <script> قبل </body> أو استخدم defer.
  11. نوع بيانات خاطئ: مثلاً بتجمع String + Number وبتتوقع نتيجة عددية.
  12. Function لا تُستدعى: عرّفتها بس نسيت تنادي عليها.

كيف تستخدم DevTools Console

  1. اضغط F12 أو Right-click → Inspect.
  2. روح لتبويب Console.
  3. اقرأ Error Message — بيقولك نوع الخطأ.
  4. شوف Line Number — بيوديك للسطر المشكلة.
  5. استخدم console.log() لطباعة قيم المتغيرات والتأكد منها.

Checklist سريعة

  • ☑️ افتح Console — هل فيه Error؟
  • ☑️ اقرأ Error Message + Line Number.
  • ☑️ هل ملف JS مربوط بـ <script>؟
  • ☑️ هل Path صحيح؟
  • ☑️ هل Selector صحيح؟
  • ☑️ هل المتغير معرّف؟
  • ☑️ هل Event مربوط صح؟
  • ☑️ هل الكود بيتنفذ بعد تحميل DOM؟

19. يعني إيه undefined؟

ما معنى undefined في JavaScript؟

undefined تعني أن المتغير تم تعريفه لكن لم يُعطَ قيمة بعد. تظهر تلقائيًا في حالات مثل: متغير بدون قيمة، وصول لـ Property غير موجودة في Object، أو Function لا تُرجع قيمة صريحة.

أمثلة

// متغير بدون قيمة
let x;
console.log(x); // undefined

// Property غير موجودة
const user = { name: "Ahmed" };
console.log(user.age); // undefined

// Function بدون return
function sayHi() {
  console.log("Hi");
}
const result = sayHi();
console.log(result); // undefined

20. يعني إيه null؟

ما معنى null في JavaScript؟

null هي قيمة يتم تعيينها بشكل صريح لتعني "لا قيمة" أو "فارغ عن قصد". الفرق إن undefined تعني "لم تُعطَ قيمة بعد"، بينما null تعني "تم تعيينها كقيمة فارغة مقصودة".

مثال

let selectedUser = null; // لا يوجد مستخدم مختار حاليًا

// لاحقًا...
selectedUser = { name: "Ahmed" }; // تم اختيار مستخدم

الفرق بين undefined وnull

المعيارundefinednull
المعنىلم تُعطَ قيمة بعدقيمة فارغة مقصودة
من يعيّنها؟JavaScript تلقائيًاالمبرمج صراحةً
typeof"undefined""object" (ده خطأ تاريخي في اللغة)
== nulltruetrue
=== nullfalsetrue

21. يعني إيه Scope؟

ما هو Scope في JavaScript؟

Scope يحدد أين يمكن الوصول إلى متغير معين في الكود. هناك 3 أنواع: Global Scope (متاح في كل مكان)، Function Scope (متاح داخل الـ Function فقط)، وBlock Scope (متاح داخل الـ Block {} فقط — مع let وconst).

أمثلة

// Global Scope — متاح في كل مكان
const globalVar = "أنا عالمي";

function example() {
  // Function Scope — متاح داخل الـ Function فقط
  const funcVar = "أنا داخل Function";

  if (true) {
    // Block Scope — متاح داخل الـ {} فقط
    const blockVar = "أنا داخل Block";
    console.log(blockVar);   // ✅ شغال
  }

  // console.log(blockVar);  // ❌ Error — مش متاح هنا
  console.log(funcVar);      // ✅ شغال
}

// console.log(funcVar);     // ❌ Error — مش متاح هنا

الربط بـ var وlet وconst

الكلمةScope
varFunction Scope (يتجاهل Block)
letBlock Scope ✅
constBlock Scope ✅

💡 ليه Scope مهم؟ فهم Scope يمنع أخطاء شائعة مثل تعديل متغير بالخطأ من مكان غير متوقع، ويساعد في تنظيم الكود.

22. يعني إيه Closure؟

ما هو Closure في JavaScript؟

Closure يعني أن Function داخلية يمكنها الوصول إلى متغيرات من Function الخارجية، حتى بعد انتهاء تنفيذ الـ Function الخارجية. ده لأن JavaScript "تتذكر" البيئة (Scope) اللي اتعملت فيها الـ Function.

مثال عملي

function createCounter() {
  let count = 0; // متغير خاص

  return function() {
    count++;
    return count;
  };
}

const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
// count مش متاح من بره — محمي بـ Closure!

شرح المثال خطوة بخطوة

  1. createCounter() أنشأت متغير count = 0.
  2. رجّعت Function جديدة — هي اللي بنحفظها في counter.
  3. createCounter() خلصت تنفيذها... لكن الـ Function المرجّعة لسه "فاكرة" count!
  4. كل مرة نستدعي counter()، بتزود count بـ 1 وترجعه.
  5. المتغير count محمي — مفيش حاجة تانية تقدر توصله مباشرة.

💡 ليه Closures مهمة؟ تُستخدم في Data Privacy، Callbacks، Event Handlers، وكتير من JavaScript Patterns.

23. يعني إيه Promise؟

ما هو Promise في JavaScript؟

Promise هو كائن يُمثّل نتيجة عملية غير متزامنة (Asynchronous) ستكتمل في المستقبل. له 3 حالات: Pending (في الانتظار)، Fulfilled (نجحت)، أو Rejected (فشلت). نتعامل مع النتيجة بـ .then() وبالخطأ بـ .catch().

لماذا نحتاج Promises؟

JavaScript بطبيعتها Single-Threaded — تنفذ أمر واحد في المرة. لكن عمليات زي جلب بيانات من سيرفر أو قراءة ملف بتاخد وقت. Promises تسمح لنا بالتعامل مع هذه العمليات بدون ما الصفحة "تقف".

الحالات الثلاثة

الحالةالمعنى
Pendingلسه شغالة، لم تنتهِ بعد
Fulfilledنجحت — النتيجة جاهزة
Rejectedفشلت — حصل خطأ

مثال بسيط

const myPromise = new Promise((resolve, reject) => {
  const success = true;

  if (success) {
    resolve("تمت العملية بنجاح! ✅");
  } else {
    reject("حدث خطأ ❌");
  }
});

myPromise
  .then(result => console.log(result))   // "تمت العملية بنجاح! ✅"
  .catch(error => console.log(error))     // لو فشلت
  .finally(() => console.log("انتهى")); // دائمًا يتنفذ

24. يعني إيه Async/Await؟

ما هو Async/Await في JavaScript؟

async/await هي طريقة حديثة (ES2017) للتعامل مع Promises بشكل أسهل وأوضح. async تجعل الـ Function تُرجع Promise. await تنتظر نتيجة Promise قبل الانتقال للسطر التالي. النتيجة: كود يبدو متزامن (Synchronous) لكنه في الحقيقة غير متزامن (Asynchronous).

مثال

// باستخدام Promise Chaining
function getData() {
  fetch("https://api.example.com/data")
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.log(error));
}

// باستخدام Async/Await (أسهل في القراءة ✅)
async function getData() {
  try {
    const response = await fetch("https://api.example.com/data");
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.log(error);
  }
}

مقارنة

المعيارPromise ChainingAsync/Await
القراءةممكن تبقى معقدة مع كتير .then()✅ أسهل — تبدو متزامنة
Error Handling.catch()try/catch
مبنية علىPromisesPromises (نفس الأساس)
التفضيل في 2024+حالات بسيطة✅ الخيار الأول

💡 ملاحظة: await يُستخدم فقط داخل async function. وasync/await مش بديل لـ Promises — ده مجرد طريقة أنظف لكتابتها.

25. إيه هو API؟

ما هو API في JavaScript؟

API (Application Programming Interface) هي واجهة تسمح لتطبيقك بالتواصل مع سيرفر أو خدمة خارجية لجلب أو إرسال بيانات. في Web Development، أشهر نوع هو REST API الذي يتعامل بصيغة JSON عبر HTTP Requests مثل GET وPOST.

كيف تعمل API؟

FrontendHTTP RequestAPI (Server)DatabaseResponse (JSON)Frontend يعرض البيانات

أشهر HTTP Methods

Methodالوظيفةمثال
GETجلب بياناتعرض قائمة المنتجات
POSTإرسال بيانات جديدةإضافة مستخدم جديد
PUT / PATCHتعديل بياناتتحديث بيانات المستخدم
DELETEحذف بياناتحذف مستخدم

مثال: جلب بيانات بـ fetch()

async function getUsers() {
  try {
    const response = await fetch("https://jsonplaceholder.typicode.com/users");
    const users = await response.json();

    users.forEach(user => {
      console.log(user.name);
    });
  } catch (error) {
    console.log("Error:", error);
  }
}

getUsers();

ما هو JSON؟

JSON (JavaScript Object Notation) هي صيغة نصية لتبادل البيانات. تبدو مثل Object في JavaScript:

{
  "name": "Ahmed",
  "age": 22,
  "skills": ["HTML", "CSS", "JavaScript"]
}

مشروع JavaScript يجمع كل ما تعلمناه

بعد ما غطّينا 25 مفهوم من أساسيات JavaScript، حان الوقت تطبّقهم كلهم في مشروع واحد.

مشروع مقترح: Smart To-Do Dashboard

الميزةالمفاهيم المستخدمة
إضافة مهمةDOM, Events, Functions, Arrays, Objects
حذف مهمةsplice(), Events, DOM Manipulation
إكمال مهمةclassList.toggle(), Object Property Update
تصفية المهامfilter(), map(), forEach()
Dark ModeclassList.toggle(), localStorage
حفظ البياناتlocalStorage, JSON.stringify(), JSON.parse()
عداد المهامArray.length, textContent
API (اختياري)fetch(), async/await, JSON

🎯 الهدف: المشروع ده بيجمع كل المفاهيم اللي شرحناها في مكان واحد. كمان هتقدر تضيفه لـ Portfolio بتاعك كأول مشروع JavaScript حقيقي.

ماذا أتعلم بعد JavaScript؟

ما الخطوة التالية بعد تعلم JavaScript؟

بعد إتقان أساسيات JavaScript، الخطوة التالية هي التعمق في ES6+ Features، بناء مشاريع عملية، تعلم Git وGitHub، ثم اختيار Framework مثل React أو Angular.

JavaScript Basics ✅ (أنت هنا!)

⬇️

DOM & Events

⬇️

ES6+ Features — Arrow Functions, Destructuring, Modules, Spread

⬇️

Array Methods — map, filter, reduce, find

⬇️

Async JavaScript — Promises, Async/Await, Fetch

⬇️

APIs — REST, JSON, HTTP

⬇️

Git & GitHub

⬇️

مشاريع عملية — Portfolio, Dashboard, Apps

⬇️

TypeScript

⬇️

Framework — React أو Angular أو Vue

⬇️

Backend — Node.js أو .NET أو Python

⬇️

Database — MongoDB, MySQL, PostgreSQL

⬇️

Full Stack Development

⚠️ ملاحظة: اختيار Framework يعتمد على هدفك. React أشهر في سوق العمل عالميًا. Angular قوي في Enterprise Applications. Vue أسهل في البداية. لكن الأساس هو JavaScript — لو فهمتها صح، أي Framework هيبقى أسهل.

الخلاصة

  1. JavaScript هي لغة التفاعل في الويب — بدونها الموقع "ثابت".
  2. استخدم const كخيار أول وlet عند الحاجة. تجنب var.
  3. الـ Functions هي أساس تنظيم الكود — اتعلم كمان Arrow Functions.
  4. Arrays وObjects هما الطريقة الأساسية لتخزين البيانات.
  5. DOM هو الجسر بين JavaScript وصفحة الويب.
  6. Events هي اللي بتخلي الموقع يتفاعل مع المستخدم.
  7. ابني مشاريع من أول يوم — Calculator وTo-Do List بداية ممتازة.
  8. Promises وAsync/Await ضروريين للتعامل مع APIs.
  9. لما حاجة مش شغالة — Console هو صديقك الأول.
  10. بعد JavaScript، الخطوة التالية هي TypeScript ثم Framework.

🚀 جاهز تكمل رحلة JavaScript؟

لو بدأت تتعلم JavaScript لكن محتار تكمل منين، أو مش عارف إزاي تحوّل اللي بتتعلمه لمشاريع حقيقية، أو محتاج خطة تعلم واضحة توصّلك لـ Front-End Development — فريق Syntax Room يقدر يساعدك تحدد المسار المناسب لمستواك وهدفك.

سواء كنت عايز تتعمق في JavaScript، أو تبدأ React/Angular، أو تبني Portfolio — تقدر تتواصل معنا.

اعرف المسار المناسب ليك

الأسئلة الشائعة (FAQ)

هل JavaScript صعبة؟

لا. JavaScript ليست صعبة لكنها تحتاج وقت وممارسة. الأساسيات (Variables, Functions, Arrays, DOM) يمكن تعلمها في أسابيع قليلة. المفاهيم المتقدمة (Closures, Promises, APIs) تحتاج وقت أكتر وتطبيق عملي. المفتاح هو بناء مشاريع وليس مجرد مشاهدة شروحات.

هل أتعلم JavaScript قبل HTML وCSS؟

لا. الأفضل تبدأ بـ HTML (هيكل الصفحة) ثم CSS (التصميم) ثم JavaScript (التفاعل). JavaScript بتتعامل مع عناصر HTML وتغيّر CSS — فلو ما تعرفهمش، مش هتفهم JavaScript في سياق الويب.

كم يستغرق تعلم JavaScript؟

بشكل تقريبي: أساسيات JavaScript تحتاج 4–8 أسابيع (2–3 ساعات يوميًا). DOM وEvents أسبوعين إضافيين. المفاهيم المتقدمة (Async, APIs) 4–6 أسابيع أخرى. الإتقان الحقيقي يأتي مع بناء مشاريع على مدار أشهر.

هل JavaScript لها مستقبل؟

نعم، JavaScript هي واحدة من أكثر لغات البرمجة طلبًا في سوق العمل وتتصدر الاستطلاعات سنويًا. تُستخدم في Front-End وBack-End وMobile وDesktop. مع ظهور TypeScript وأدوات مثل React وNode.js، مستقبل JavaScript قوي جدًا.

هل JavaScript هي نفسها Java؟

لا. JavaScript وJava لغتان مختلفتان تمامًا. Java لغة Object-Oriented تُستخدم في تطبيقات Enterprise وAndroid. JavaScript لغة Dynamic تُستخدم أساسًا في الويب. الاسم المتشابه سببه تسويقي تاريخي فقط ولا علاقة تقنية بينهما.

هل يمكن استخدام JavaScript في Backend؟

نعم. باستخدام Node.js يمكنك بناء سيرفرات وAPIs بـ JavaScript. ده يعني إنك تقدر تستخدم لغة واحدة للـ Front-End والـ Back-End (يُسمى Full Stack JavaScript). Frameworks مثل Express.js بتسهّل بناء Backend بـ Node.js.

ما أفضل طريقة لتعلم JavaScript؟

أفضل طريقة هي الجمع بين الفهم النظري والتطبيق العملي. اتعلم مفهوم (مثل Arrays) → طبّقه في مثال → ابني مشروع صغير يستخدمه. لا تكتفي بالمشاهدة. استخدم Console كثيرًا. ابني مشاريع حقيقية (Calculator, To-Do, Portfolio).

ما الفرق بين JavaScript وTypeScript؟

TypeScript هي "JavaScript + Types". TypeScript تضيف Static Typing لـ JavaScript — يعني بتحدد نوع كل متغير وParameter. ده بيقلل الأخطاء وبيحسّن تجربة التطوير. TypeScript بيتحوّل (Compile) لـ JavaScript عادية في النهاية. تعلم JavaScript الأول ثم انتقل لـ TypeScript.

ما أول مشروع JavaScript للمبتدئين؟

أفضل المشاريع الأولى: Calculator (عمليات حسابية بسيطة)، To-Do List (إضافة وحذف مهام)، أو Quiz App. المشاريع دي بتعلمك DOM وEvents وFunctions وArrays في سياق عملي.

هل يمكن تعلم JavaScript بدون خبرة في البرمجة؟

نعم. JavaScript مناسبة كلغة أولى. لكن الأفضل تبدأ بـ HTML وCSS الأول لأنهم أبسط وبيديوك سياق لفهم JavaScript. مش لازم يكون عندك خبرة سابقة — بس لازم يكون عندك صبر وتطبيق عملي.

لماذا JavaScript مهمة في Front-End؟

لأنها اللغة الوحيدة اللي المتصفح يفهمها مباشرة لإضافة التفاعل. HTML تبني الهيكل وCSS تصمّمه، لكن JavaScript هي اللي بتخليه يتفاعل مع المستخدم — أزرار تشتغل، بيانات تتحدث، قوائم تفتح وتقفل، وAnimations تشتغل.

ما أهم JavaScript Methods التي يجب تعلمها؟

أهم Methods: querySelector(), addEventListener(), map(), filter(), forEach(), push(), splice(), fetch(), JSON.stringify(), JSON.parse(). هذه Methods بتغطي أغلب احتياجاتك اليومية.

ما الفرق بين Synchronous وAsynchronous JavaScript؟

Synchronous يعني الكود يتنفذ سطر بسطر بالترتيب — كل سطر ينتظر اللي قبله. Asynchronous يعني بعض العمليات تبدأ ولا تنتظر اكتمالها — مثل جلب بيانات من API. JavaScript تستخدم Callbacks, Promises, وAsync/Await للتعامل مع العمليات غير المتزامنة.

ما هو Fetch API؟

Fetch API هي واجهة مدمجة في المتصفح لإرسال HTTP Requests وجلب بيانات من سيرفر. تُرجع Promise ويتم التعامل معها بـ .then() أو async/await. هي البديل الحديث لـ XMLHttpRequest.

هل يجب أن أتعلم JavaScript قبل React؟

نعم، بالتأكيد. React مبني على JavaScript. لو ما بتفهمش أساسيات مثل Functions, Arrays, Objects, Destructuring, Promises, وModules — هتواجه صعوبات كبيرة في React. اتقن JavaScript الأساسيات الأول ثم انتقل لـ React.

الكلمات المفتاحية:تعلم JavaScriptتعلم JavaScript للمبتدئينتعلم جافاسكريبتشرح JavaScriptJavaScript للمبتدئينتعلم JavaScript من الصفرأساسيات JavaScriptJavaScript Tutorialشرح DOMJavaScript DOMJavaScript EventsJavaScript ArrayJavaScript ObjectJavaScript FunctionsPromise JavaScriptAsync Await JavaScriptJavaScript APIمشاريع JavaScript للمبتدئينSyntax Room كورسات
العودة إلى المدونة

تواصل معنا

عبر الواتساب او الماسنجر