undefined في JavaScript: 5 طرق للتحقق (وأيها تختار)

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

«Uncaught ReferenceError» — عدوك الأول؟ تعلم التحقق من undefined بشكل صحيح في JavaScript

\n\n

كل من كتب في JavaScript ولو سطرين، واجه الغامض undefined. إنه ليس مجرد «مكان فارغ» — بل هو نوع بيانات كامل بقيمة خاصة به. ولكن كيف تلتقطه بشكل صحيح؟ إذا كنت قد بحثت عن «How can I check for undefined in JavaScript»، فأنت لست وحدك: هذا السؤال على Stack Overflow حصد مئات الآلاف من المشاهدات. المشكلة هي أن هناك عدة طرق للتحقق في JS، وكل منها يحمل مخاطر خفية.

\n\n

في هذه المقالة، سنستعرض 5 طرق، من البسيط إلى المعقد، ونقارن أداءها وموثوقيتها، ونكتشف أي طريقة يجب استخدامها في عام 2025. هيا بنا!

\n\n

ما هو undefined في الحقيقة؟

\n\n

قبل أن نتحقق، دعنا نتفق على المصطلحات. undefined هي قيمة بدائية تُعطى لمتغير إذا تم تعريفه ولكن لم تتم تهيئته:

\n\n
let a;\nconsole.log(a); // undefined\n
\n\n

هام: undefined ≠ null ≠ not defined. null هو «لا شيء» مقصود، و not defined (ReferenceError) يحدث عندما لا يتم تعريف المتغير على الإطلاق. هذه الفروق الدقيقة حاسمة لاختيار التحقق الصحيح.

\n\n

الطريقة رقم 1: العامل typeof — المعيار الذهبي؟

\n\n

الطريقة الأكثر شيوعًا وأمانًا هي استخدام typeof:

\n\n
if (typeof x === 'undefined') {\n  console.log('x غير معرف');\n}\n
\n\n

لماذا يعمل هذا حتى مع المتغيرات غير المعلنة؟ typeof لا يرمي خطأ ReferenceError أبدًا. إذا كان المتغير غير موجود، فإنه ببساطة يُرجع السلسلة النصية "undefined".

\n\n

الإيجابيات:

\n
    \n
  • آمن للمتغيرات غير المعلنة
  • \n
  • كود قابل للقراءة والفهم
  • \n
  • يعمل في جميع المتصفحات والبيئات (Node.js, Deno)
  • \n
\n\n

السلبيات:

\n
    \n
  • طويل نسبيًا للاستخدام المتكرر
  • \n
  • قد يضلل المبتدئين (مقارنة نصية)
  • \n
\n\n

الحكم: أفضل خيار للتحقق العام وفي الحالات التي قد لا يكون فيها المتغير معلنًا.

\n\n

الطريقة رقم 2: المقارنة الصارمة مع undefined (===)

\n\n

الطريقة الثانية من حيث الشهرة هي مقارنة القيمة مباشرة:

\n\n
if (x === undefined) {\n  console.log('x يساوي undefined');\n}\n
\n\n

هناك فارق بسيط هنا: يجب أن يكون المتغير معلنًا. إذا كان x غير موجود، ستحصل على خطأ ReferenceError. لذلك هذا الكود آمن فقط لـ:

\n
    \n
  • خصائص الكائنات (obj.prop === undefined)
  • \n
  • معاملات الدوال
  • \n
  • المتغيرات المعلنة عبر let أو const أو var
  • \n
\n\n

المزلق: undefined العام

\n

في المتصفحات القديمة (IE 8 وما دونه) كان يمكن إعادة تعريف undefined:

\n
undefined = 'أنا الآن سلسلة نصية'; // كابوس!\n
\n

هذا غير ممكن الآن (في الوضع الصارم)، ولكن إذا كنت تدعم كودًا قديمًا — فاستخدم typeof بدلاً من ذلك.

\n\n

الحكم: طريقة ممتازة للمتغيرات المحلية وخصائص الكائنات. سريعة وموجزة.

\n\n

الطريقة رقم 3: العامل void

\n\n

طريقة غير معروفة ولكنها أنيقة — void 0:

\n\n
if (x === void 0) {\n  console.log('x undefined');\n}\n
\n\n

العامل void يحسب التعبير ويعيد undefined. void 0 هو أقصر طريقة للحصول على undefined نقي، غير معتمد على المتغير العام.

\n\n

متى يكون هذا مفيدًا؟

\n
    \n
  • في الكود المصغر (يوفر بايتات)
  • \n
  • في المكتبات حيث الحماية من إعادة تعريف undefined مهمة
  • \n
  • في البرمجة الوظيفية (مثل سلاسل الـ Promises)
  • \n
\n\n

العيب: يبدو غريبًا

المدونات

توصيات الكتب