تخطَّ إلى المحتوى

٣ يوليو ٢٠٢٦

حل خطأ TypeError في جافاسكريبت (أشهر الأنواع وحلولها) بالعربي

شارك المقال:

TypeError من أكثر أخطاء جافاسكريبت تكرارًا. المعنى العام بسيط: استخدمتَ قيمة بطريقة لا تناسب نوعها. لنستعرض أشهر أشكاله وحلّ كلٍّ منها.

1) TypeError: x is not a function

const user = { name: "براء" };
user.greet(); // ❌ TypeError: user.greet is not a function

السبب: استدعيت شيئًا ليس دالة. غالبًا خطأ إملائي في الاسم، أو المتغيّر ليس من النوع الذي تظنّه.

الحل: تأكّد أن الخاصية دالة فعلًا قبل استدعائها:

if (typeof user.greet === "function") {
  user.greet();
}

2) TypeError: Cannot read properties of undefined

هذا الأشهر على الإطلاق، وله مقال مخصّص:

const data = {};
console.log(data.user.name); // ❌ data.user غير موجود

الحل: استخدم السلسلة الاختيارية ?.:

console.log(data.user?.name ?? "غير متوفّر");

3) TypeError: Assignment to constant variable

const count = 1;
count = 2; // ❌ لا يمكن إعادة تعيين ثابت

السبب: حاولت تغيير متغيّر معرّف بـ const.

الحل: إن كنت تحتاج تغيير القيمة استخدم let. راجع الفرق الكامل في let و var و const:

let count = 1;
count = 2; // ✅

💡 ملاحظة: const يمنع إعادة التعيين فقط، لا تعديل محتوى الكائن. يمكنك const arr = []; arr.push(1) بلا خطأ.

4) TypeError: x is not iterable

const n = 5;
for (const item of n) {} // ❌ الأرقام غير قابلة للتكرار

الحل: تأكّد أنك تكرّر على مصفوفة أو نصّ أو Set/Map، لا على رقم أو undefined.

جدول مرجعي سريع

الرسالةالمعنىالحل المختصر
is not a functionليست دالةراجع الاسم وtypeof
Cannot read properties of undefinedقراءة من قيمة فارغة?. والتحقّق
Assignment to constantتعديل ثابتاستخدم let
is not iterableغير قابل للتكراركرّر على مصفوفة/نصّ

كيف تشخّص أي TypeError؟

  1. اقرأ رقم السطر في رسالة الخطأ — يشير للموقع الدقيق.
  2. اطبع القيمة قبل السطر: console.log(typeof x, x).
  3. اسأل: هل القيمة من النوع الذي أتوقّعه؟ غالبًا ستجدها undefined.

الخلاصة

TypeError يقول: "نوع القيمة لا يناسب ما تحاول فعله بها." معظم الحالات تعود إلى قيمة undefined غير متوقّعة، أو استخدام const حيث يلزم let. تحقّق من الأنواع مبكرًا واستخدم ?. بسخاء.

تعمّق في أنواع البيانات في جافاسكريبت و أخطاء undefined.

📚 مصادر رسمية للتعمّق: توثيق JavaScript على MDN

الأسئلة الشائعة

ماذا يعني TypeError في جافاسكريبت؟

يعني أنك استخدمت قيمة بطريقة لا تناسب نوعها — مثل استدعاء شيء ليس دالة، أو قراءة خاصية من undefined أو null، أو تعديل ثابت const.

ما الفرق بين TypeError و ReferenceError؟

ReferenceError يعني أن المتغيّر غير معرّف أصلًا (اسم غير موجود). أمّا TypeError فالمتغيّر موجود لكن نوعه لا يسمح بالعملية التي أجريتها عليه.

كيف أتجنّب TypeError: cannot read properties of undefined؟

تحقّق من وجود القيمة قبل قراءة خصائصها باستخدام السلسلة الاختيارية obj?.prop أو شرط if، خصوصًا مع البيانات القادمة من الشبكة.

اقرأ أيضًا

تصفّح كل المقالات في المدوّنة، أو ابدأ التعلّم من المسارات و خرائط الطريق.