التحقق من نوع string في JavaScript: دليل شامل

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

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

ابدأ الدورة

«هل هذا نص؟» — سؤال يقلق كل مطور JavaScript

\n\n

أنت تكتب الكود، وفجأة تتوقف. يبدو أن المتغير يجب أن يحتوي على نص، لكن ماذا لو وصل إليه null؟ أو رقم؟ أو الأسوأ من ذلك، undefined؟

\n\n

هل هذا مألوف؟ إذا كان الأمر كذلك، فأنت لست وحدك. سؤال «Check if a variable is a string in JavaScript» هو واحد من أكثر الأسئلة شيوعًا على Stack Overflow مع عشرات الآلاف من المشاهدات. وهذا ليس من قبيل الصدفة: JavaScript هي لغة ذات كتابة ديناميكية، والأخطاء المتعلقة بالأنواع تحدث حتى لدى المطورين ذوي الخبرة.

\n\n

في هذه المقالة، سنستعرض جميع الطرق الممكنة للتحقق مما إذا كان المتغير نصًا. ستتعلم:

\n
    \n
  • لماذا typeof هو أفضل صديق لك (ولكن ليس دائمًا)
  • \n
  • متى يخذلك instanceof
  • \n
  • كيف تعمل طريقة «القناص» Object.prototype.toString
  • \n
  • وماذا تفعل إذا كنت تستخدم المكتبات
  • \n
\n\n

هيا بنا! 🚀

\n\n

الطريقة رقم 1: typeof — الكلاسيكية

\n\n

أبسط وأسرع طريقة هي عامل typeof. يقوم بإرجاع سلسلة نصية باسم النوع:

\n\n
const name = "أليسا";\nconst age = 25;\nconst isAdmin = true;\n\nconsole.log(typeof name);    // "string"\nconsole.log(typeof age);     // "number"\nconsole.log(typeof isAdmin); // "boolean"
\n\n

التحقق من النص يكون كالتالي:

\n\n
if (typeof variable === "string") {\n  console.log("نعم، هذا نص!");\n}
\n\n

المزايا:

\n
    \n
  • يعمل بسرعة
  • \n
  • لا يتطلب استيرادًا
  • \n
  • سهل القراءة
  • \n
\n\n

العيوب:

\n
    \n
  • لا يفرق بين النص البدائي "نص" وكائن new String("نص")
  • \n
  • بالنسبة لـ null يُرجع "object" (خطأ تاريخي في JavaScript)
  • \n
\n\n

بالمناسبة، بخصوص null — هذا خطأ معروف في اللغة لن يتم إصلاحه حتى لا يتم كسر المواقع القديمة. لذا typeof null === "object" أمر طبيعي.

\n\n

وماذا عن new String()؟

\n\n

في JavaScript هناك نوعان من النصوص: بدائية (عادية) وكائنات (تم إنشاؤها عبر new String()). عمليًا، لن تستخدم new String() أبدًا تقريبًا، لكن من الجيد معرفتها:

\n\n
const primitiveString = "مرحبًا";\nconst objectString = new String("مرحبًا");\n\nconsole.log(typeof primitiveString); // "string"\nconsole.log(typeof objectString);    // "object"
\n\n

إذا قام شخص ما (أو شيء ما) في الكود الخاص بك بتمرير نص كائن، فسوف يخدعك typeof. لكن لا تقلق: في المشاريع الحقيقية، هذا نادر الحدوث.

\n\n

الطريقة رقم 2: instanceof — للنصوص الكائنية

\n\n

عامل instanceof يتحقق مما إذا كان الكائن مثيلًا لفئة معينة:

\n\n
const str = new String("اختبار");\nconsole.log(str instanceof String); // true\n\nconst str2 = "اختبار";\nconsole.log(str2 instanceof String); // false — لأنه بدائي
\n\n

كما ترى، instanceof لا يعمل مع النصوص البدائية. لذلك نادرًا ما يُستخدم — فقط إذا كنت متأكدًا من أنك تتعامل مع كائنات.

\n\n

متى قد يكون مفيدًا؟ إذا كنت تكتب مكتبة تقبل كلًا من البدائيات والكائنات. لكن في 99% من الحالات، سيكون typeof كافيًا.

\n\n

الطريقة رقم 3: Object.prototype.toString.call() — الجندي العالمي

\n\n

هذه الطريقة هي قناص حقيقي. تعمل مع أي نوع بيانات ولا تخطئ أبدًا:

\n\n
function isString(value) {\n  return Object.prototype.toString.call(value) === "[object String]";\n}\n\nconsole.log(isString("مرحبًا"));        // true\nconsole.log(isString(new String("مرحبًا"))); // true\nconsole.log(isString(123));             // false\nconsole.log(isString(null));            // false\nconsole.log(isString(undefined));       // false
\n\n

المدونات

توصيات الكتب