مقدمة: لماذا هذه المهمة أسهل مما تبدو
\n\nكل مطور كتب ولو مرة واحدة بلغة JavaScript، واجه موقفًا يحتاج فيه للتحقق مما إذا كانت السلسلة فارغة أمامه، أو ربما كانت null أو undefined. قد يبدو الأمر بسيطًا؟ لكن لنكن صادقين: كم مرة كتبت if (str == "") وواجهت خطأ عندما كان المتغير null؟ وكم مرة حاولت استدعاء .trim() على undefined والتقطت خطأ أحمر في وحدة التحكم؟
هذا الموضوع - أحد أكثر الأسئلة شيوعًا على Stack Overflow مع عشرات الآلاف من المشاهدات. وليس من دون سبب. في JavaScript هناك العديد من الفروق الدقيقة التي تحول الفحص البسيط إلى حقل ألغام. في هذه المقالة، سنحلل جميع الطرق الممكنة، من الأكثر وضوحًا إلى الاحترافية، ونكتشف أيها أفضل للاستخدام في مشروعك.
\n\nسنتحدث عن ماهية القيم falsy، وكيف يعمل العاملان == و ===، ولماذا "" و 0 ليسا نفس false. بنهاية المقال، ستعرف بالضبط كيفية كتابة فحص عالمي لا يخذلك.
المشكلة: ما الذي يعتبر سلسلة "فارغة"؟
\n\nقبل كتابة الكود، يجب تحديد ما نتحقق منه بوضوح. في سياق السؤال "How do I check for an empty/undefined/null string in JavaScript?"، نعني عادةً ثلاث حالات:
\n\n- \n
- سلسلة فارغة (
""أو'') - سلسلة طولها صفر. \n - null - غياب متعمد للقيمة. \n
- undefined - المتغير معلن ولكن لم تتم تهيئته. \n
لكن هناك حالة رابعة غير صريحة: سلسلة تتكون فقط من مسافات (" "). غالبًا ما تعتبر "فارغة" من وجهة نظر منطق الأعمال. سنحلل جميع الخيارات.
الطريقة 1: التحويل المنطقي (الأبسط)
\n\nالطريقة الأكثر شيوعًا وإيجازًا هي استخدام حقيقة أن JavaScript يحول القيم تلقائيًا إلى true أو false في السياق المنطقي.
\n\nlet str = "";\n\nif (!str) {\n console.log("السلسلة فارغة، null أو undefined");\n} else {\n console.log("السلسلة ليست فارغة");\n}\n\n\nهذا الكود سيعمل مع ""، null، undefined، 0، NaN و false. لماذا؟ لأن كل هذه القيم في JavaScript تعتبر falsy. إذا كنت متأكدًا من أن المتغير هو سلسلة (أو قد يكون null/undefined)، فهذه الطريقة كافية.
لكن هناك مشكلة: إذا كان المتغير يساوي 0 (رقم)، فإن الفحص سيقول أيضًا "فارغ". إذا كان هذا مهمًا، فهذه الطريقة غير مناسبة.
الطريقة 2: المقارنة الصارمة (تحكم واضح)
\n\nإذا كنت تريد أن تكون دقيقًا قدر الإمكان وتفحص فقط الحالات الثلاث المذكورة، استخدم المقارنة الصارمة (===).
function isEmptyOrNull(str) {\n return str === "" || str === null || str === undefined;\n}\n\nconsole.log(isEmptyOrNull("")); // true\nconsole.log(isEmptyOrNull(null)); // true\nconsole.log(isEmptyOrNull(undefined)); // true\nconsole.log(isEmptyOrNull("hello")); // false\nconsole.log(isEmptyOrNull(0)); // false (الرقم لن يمر)\n\n\nهذا الكود يعمل بدون مفاجآت. لا يخلط بين 0 أو false والسلسلة الفارغة. لكنه لا يعالج السلاسل المكونة من مسافات.
الطريقة 3: Trim + فحص (للفراغ "الحقيقي")
\n\nغالبًا ما يدخل المستخدمون مسافات في النموذج، والسلسلة " " تبدو فارغة بصريًا. لالتقاط هذه الحالات أيضًا، نحتاج إلى قص المسافات باستخدام طريقة .trim().
function isBlank(str) {\n return !str || str.trim() === "";\n}\n\nconsole