تحويل سلسلة نصية إلى قيمة منطقية في JavaScript: دليل شامل

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

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

ابدأ الدورة

مقدمة: لماذا "true" لا تساوي true؟

\n\n

تخيل موقفًا: أنت تكتب الواجهة الأمامية لمتجر إلكتروني. يختار المستخدم خيار "تلقي الإشعارات عبر البريد الإلكتروني"، ويقوم الكود الخاص بك بحفظه في localStorage كسلسلة نصية "true". في الزيارة التالية، تقرأ هذه السلسلة وتحاول التحقق من الشرط:

\n\n
let userPref = localStorage.getItem('notifications');\nif (userPref) {\n    // تفعيل الإشعارات\n}\n
\n\n

وهنا المفاجأة — الشرط يعمل دائمًا! حتى لو كانت السلسلة النصية في localStorage هي "false"، فإن JavaScript يعتبرها قيمة truthy (صحيحة). ليس لأنك فعلت شيئًا خاطئًا، ولكن لأن أي سلسلة نصية غير فارغة في JS هي true.

\n\n

هذه المشكلة شائعة جدًا لدرجة أن السؤال على Stack Overflow حصد آلاف المشاهدات وعشرات الحلول. اليوم سنفهم نهائيًا كيفية تحويل سلسلة نصية إلى boolean في JavaScript بشكل صحيح، وسنستعرض 5 طرق عملية ونحدد أفضلها.

\n\n

لماذا لا يمكن ببساطة استخدام if()؟

\n\n

دعنا نغلق هذا السؤال فورًا. يعتقد العديد من المبتدئين: "إذا كتبت if(str)، فإن السلسلة النصية "false" ستتحول إلى false". هذا اعتقاد خاطئ خطير.

\n\n

في JavaScript، هناك مفهوم القيم falsy (الخاطئة). هناك 6 قيم فقط:

\n
    \n
  • false
  • \n
  • 0 (صفر)
  • \n
  • "" (سلسلة نصية فارغة)
  • \n
  • null
  • \n
  • undefined
  • \n
  • NaN
  • \n
\n\n

كل ما عدا ذلك هو truthy. السلسلة النصية "false" ليست فارغة، بل تحتوي على 5 أحرف. لذلك فهي truthy. نفس الشيء مع "0" و "null" وحتى "undefined". التحويل البسيط عبر if() أو Boolean() لن يعمل مع السلاسل النصية.

\n\n

أفضل 5 طرق لتحويل سلسلة نصية إلى boolean

\n\n

لقد اختبرنا جميع الطرق الشائعة من المناقشات على Stack Overflow والمشاريع الحقيقية. إليك هذه الطرق، من الأسوأ إلى الأفضل.

\n\n

الطريقة 1: العامل الثلاثي (الأكثر وضوحًا، لكنه متضخم)

\n\n
function stringToBoolean(str) {\n    return str === 'true' ? true : str === 'false' ? false : null;\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('false')); // false\nconsole.log(stringToBoolean('yes'));   // null\n
\n\n

الميزة: واضح للمبتدئين.
\nالعيب: الكود يتضخم إذا كنت بحاجة لمعالجة "yes" أو "1" أو "on". ستحتاج لكتابة سلسلة من الشروط.

\n\n

الطريقة 2: JSON.parse() (أنيق، لكنه صارم)

\n\n
function stringToBoolean(str) {\n    try {\n        return JSON.parse(str);\n    } catch (e) {\n        return null;\n    }\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('false')); // false\nconsole.log(stringToBoolean('TRUE'));  // خطأ! سيعيد null\n
\n\n

طريقة JSON.parse() قادرة على تحليل السلاسل النصية "true" و "false" إلى قيم منطقية. لكن هناك فارق بسيط: إنها حساسة لحالة الأحرف. "True" أو "TRUE" ستسبب خطأ. لكن JSON.parse("null") سيعيد null وليس false — قد يكون هذا مفيدًا.

\n\n

الطريقة 3: التعبير المنتظم (مرن، لكنه بطيء)

\n\n
function stringToBoolean(str) {\n    if (typeof str !== 'string') return null;\n    return /^(true|yes|1|on)$/i.test(str.trim());\n}\n\nconsole.log(stringToBoolean('true'));  // true\nconsole.log(stringToBoolean('YES'));   // true\nconsole.log(stringToBoolean('off'));   // false\nconsole.log(stringToBoolean('0'));     // false\n
\n\n

هنا نستخدم العلم i (غير حساس لحالة الأحرف) ونعالج عدة متغيرات من "الحقيقة": true و yes و 1 و

المدونات

توصيات الكتب