Menu
العربية

القيم Truthy وFalsy في JavaScript: القائمة الكاملة

تعرّف على القيم الـ falsy والـ truthy في JavaScript، القائمة الكاملة للقيم الكاذبة، وكيف يتصرّف التحويل المنطقي داخل شروط if.

لكل قيمة مزاجها البولياني

في جافا سكريبت تقدر تحط أي قيمة في مكان يتوقّع قيمة بوليانية — سواء داخل if، أو كشرط لـ while، أو بجانب && و ||. ولمّا تسوّي هذا، تتحوّل القيمة تلقائيًا إلى true أو false. القيم اللي تتحوّل إلى false نسمّيها falsy، وكل ما عداها يُعتبر truthy.

index.js
Output
Click Run to see the output here.

لا تحتاج إلى دالة تحويل ولا إلى cast صريح، فـ JavaScript تتكفّل بالأمر تلقائياً. والقواعد ثابتة ومحدودة، بحيث يكفي أن تحفظ قائمة القيم falsy حتى يتّضح لك كل ما تبقّى.

قائمة القيم falsy كاملةً

توجد سبع قيم فقط تُعدّ falsy في جافا سكريبت، وما عداها في اللغة كلها فهو truthy.

index.js
Output
Click Run to see the output here.

هذه هي القائمة كاملة:

  • false — القيمة المنطقية نفسها.
  • 0 و -0 — كلا الصفرين.
  • 0n — صفر من نوع BigInt.
  • "" — السلسلة الفارغة (سواء كانت بعلامتَي اقتباس مفردة أو مزدوجة أو backtick، كلها نفس الشيء).
  • null — قيمة "لا شيء عن قصد".
  • undefined — قيمة "غير مُعيَّنة".
  • NaN — ناتج العمليات الحسابية غير الصالحة مثل 0 / 0.

احفظ هذه السبعة عن ظهر قلب. وبعد ذلك، كلما صادفت قيمة لست متأكدًا منها، اسأل نفسك: "هل هي واحدة من تلك السبعة؟" إن لم تكن كذلك، فهي truthy.

المفاجآت: "0" و [] و {}

هنا بالضبط يقع المبتدئون في الفخ. فهناك قيم كثيرة تبدو فارغة لكنها في الحقيقة truthy:

index.js
Output
Click Run to see the output here.

السلاسل النصية تكون falsy فقط إذا كان طولها صفرًا. السلسلة "0" تحتوي على حرف واحد، ولذلك فهي truthy. أما المصفوفات والكائنات فهي دائمًا truthy — حتى لو كانت فارغة — لأن JavaScript تتعامل معها ككائنات، وجميع الكائنات truthy بغض النظر عن محتواها.

إذا كنت قادمًا من Python، فهذه أكبر نقلة ذهنية ستواجهها. ففي Python تعتبر [] و {} قيمًا falsy، لكن في JavaScript الأمر مختلف تمامًا.

الطريقة الصحيحة للتحقق من "الفراغ"

بما أن [] و {} قيم truthy، فلا يمكنك استخدامها مباشرة داخل جملة if للتحقق مما إذا كانت فارغة. عليك أن تكون صريحًا:

index.js
Output
Click Run to see the output here.

نفس الشيء مع النصوص، لو حابب تعتبر النص اللي فيه مسافات بس فارغًا:

index.js
Output
Click Run to see the output here.

القيم truthy وfalsy اختصار مريح، لكنها ليست بديلاً عن التفكير في معنى "الفراغ" بالنسبة لبياناتك.

التحويل إلى Boolean حقيقي في JavaScript

أحياناً تحتاج قيمة true أو false فعلية، لا مجرد قيمة تميل إلى truthy. إليك طريقتين شائعتين:

index.js
Output
Click Run to see the output here.

Boolean(x) هي طريقة التحويل الصريحة إلى Boolean في JavaScript، بينما !!x هي الصيغة المختصرة لنفس الفكرة — علامة ! الأولى تحوّل القيمة إلى boolean وتعكسها، والثانية تعيدها إلى وضعها الأصلي. الاثنتان شائعتان الاستخدام؛ !! أقصر، وBoolean() أوضح في القراءة.

كثيرًا ما تصادف !! داخل تعليمات return عندما تريد أن تُرجع الدالة قيمة boolean نقية:

index.js
Output
Click Run to see the output here.

قيم truthy و falsy مع && و ||

المعاملات المنطقية في جافا سكريبت لا تُرجع true أو false كما يظن الكثيرون، بل تُرجع إحدى القيمتين اللتين طُبِّقت عليهما. ولمعرفة أيهما ستحصل عليها، عليك فهم مفهوم truthy و falsy:

index.js
Output
Click Run to see the output here.

لهذا السبب تحديدًا يُستخدم نمط value || defaultValue كثيرًا لإعطاء قيمة افتراضية. لكن فيه فخ خفي: هذا النمط يتعامل مع جميع القيم falsy بنفس الطريقة، بما في ذلك 0 و ""، وهاتان القيمتان غالبًا ما تكونان مدخلات مشروعة:

index.js
Output
Click Run to see the output here.

إذا كنت تريد التعامل مع null أو undefined فقط، فاستخدم معامل الدمج العدمي ?? بدلاً من ذلك. هذا موضوع مشروح في صفحته الخاصة.

مرجع سريع

index.js
Output
Click Run to see the output here.

اطبعها، الصقها على شاشتك، وامضِ في حياتك.

التالي: Iterators و Generators

بعد أن أتقنت الشروط والحلقات، يتناول الفصل القادم كيف تُتيح JavaScript للقيم أن تُولِّد نفسها عند الطلب. الـ Iterators والـ Generators هي الآلية الكامنة خلف for...of و spread وكثير من الـ APIs الحديثة — وهي موضوعنا القادم.

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

ما هي القيم الـ falsy في JavaScript؟

عددها سبع قيم بالضبط: false، و0، و-0، و0n (صفر BigInt)، و'' (السلسلة الفارغة)، وnull، وundefined، وNaN. ما عدا ذلك يُعتبر truthy — بما في ذلك '0' و'false' و[] و{}. احفظ هذه القائمة القصيرة وستعرف حكم أي قيمة أخرى بالاستبعاد.

هل المصفوفة الفارغة truthy أم falsy في JavaScript؟

‏truthy. تعبير if ([]) { ... } سيُنفَّذ فعلًا، وهذا ما يفاجئ القادمين من Python أو PHP. فالمصفوفات والكائنات كلها objects، وكل object يُعدّ truthy بغضّ النظر عن محتواه. للتحقق من أن المصفوفة فارغة، استخدم arr.length === 0 صراحةً.

كيف أُحوّل قيمة إلى Boolean في JavaScript؟

هناك طريقتان: Boolean(value) وهي الصيغة الصريحة، و!!value وهي الاختصار المشهور (نفي مزدوج يُحوّل القيمة ثم يعكسها). كلتاهما تتبعان نفس قواعد truthy/falsy. استخدمهما عندما تريد الحصول على true أو false فعليًّا، لا مجرد قيمة توحي بذلك.

تعلّم البرمجة مع Coddy

ابدأ الآن