رسالة الموقع
ما هي القيم التي تكون Truthy / Falsy في الجافا سكربت ؟

ما هي القيم التي تكون Truthy / Falsy في الجافا سكربت ؟

لكل قيمة من قيم البيانات في الجافا سكربت قيمة منطقية ( boolean value ) مقابلة لها , يعني مثلا الرقم 5 , ده قيمة رقمية و له قيمة منطقية مقابلة و هي true , و الرقم صفر كقيمة رقمية برضوا له قيمة منطقية مقابلة و هي false , و هكذا مع كل القيم و أنواع البيانات في الجافا سكربت.
    

القيم اللي بتكون قيمتها المنطقية المقابلة هي true بنسميها truthy value , و مش بنقول عليها true عشان نوضح إنها في اﻷصل مش من النوع boolean , هي مماثلة أو مقابلة للـ true في القيم المنطقية. و كذلك طبعا القيم اللي بيكون مماثلها المنطقي false بنقول عليها falsy value.

    

ايه هي القيم الـ Falsy في الجافا سكربت ؟

1- طبعا القيمة المنطقية False نفسها

2- القيم الرقمية 0 , -0 , 0n , -0n

3- القيم النصية للنص الفارغ "" , '' , ``

4- القيمة Null

5- القيمة Undefined

6- القيمة NaN و التي تعني ( Not a Number )

    
و كل ما عدا ذلك من قيم في الجافا سكربت تقدر تعتبره truthy value.
        
    

ناخد مثال يوضح الموضوع

let a = 0;

if (a) {
console.log("0 is truthy value.");
}else{
console.log("0 is falsy value.");
}
    
في المثال فوق هتلاقي إنه تمت طباعة جملة "0 is falsy value." في الكونسول , وده معناه إن الجافا سكربت اعتبرت إن المتغير a اللي قيمته = 0 , اعتبرته false , و ده ﻹن زي ما قلنا الصفر من القيم الـ falsy
    
* ملحوظة

يجب مراعاة نوع البيانات و قميتها عند محاولة فهم مقابلها المنطقي إن كانت truthy أو falsy , و المقصود هو إن الصفر 0 كقيمة رقمية هو false , لكن لو عندنا متغير نصي قيمته = "0" فده مش falsy value ﻹن النص الوحيد اللي بيكون falsy هو النص الفارغ ""

    
        

المقارنات و جنان الجافا سكربت

ما هي القيم التي تكون Truthy / Falsy في الجافا سكربت ؟
لغة الجافا سكربت معروفة بإن ليها سلوك مربك و محير في بعض اﻷحيان , و طبعا سلوك الجافا سكربت ده كان سبب في انتشار كوميكس كتير عليها , و خلينا نشوف مثال على الـ " جنان " ده
    
if (null > 0) // false
if (null < 0) // false
if (null == 0) // false

if (null <= 0) // true
if (null >= 0) // true
    
قلنا إن القيمة null في الجافا سكربت من القيم الـ falsy , و كذلك القيمة الرقمية صفر 0 قيمة falsy , طيب عند مقارنة القيمتين null و صفر في الجافا سكربت , هنلاقي إن الجافا سكربت مش بتعتبر null تساوي صفر , و لا بتعتبرها أكبر من صفر و لا أصغر من صفر .. و لغاية هنا ما فيش مشكلة باعتبار إنك بتقارن قيمتين مختلفتين أصلا , زي ما تسأل هل البحر أعمق أم العسل أجمل 😕
    
لكن لما بنسأل الجافا اسكربت هل القيمة null <= 0 الجافا سكربت بتقولنا آه صحيح , طيب هل القيمة null >= 0 برضوا بتقولنا آه صحيح , طيب نفهم بقى إن القيمة null بتساوي صفر .. ﻷ الجافا سكربت بتقولنا false 😂😂
    
السلوك السابق ده و إن كان غريب و غير متوقع , لكنه في الحقيقة سلوك طبيعي جدا و منطقي , أنت لما سألت عن القيمة null و قارنتها بالقيمة 0 باستخدام المشغلات ( > , < , == ) الجافا سكربت أبقت على كل قيمة كما هي الصفر فضل صفر رقمي , و null فضلت قيمة مجهولة و غير معينة و بالتالي كل المقارنات دي قالت false
    
لكن لما قارنت باستخدام المشغلات ( <= , >= ) هنا الجافا سكربت قررت تحويل القيمة null إلى قيمة رقمية , و طبعا حولتها للصفر فكانت النتيجة true في الحالتين.
    
            
مثال آخر على سلوك الجافا سكربت الغريب

if ([]) // true
if (0) // false
if (0 == []) // true
    
قلنا إن الصفر falsy value , و المصفوفات ( حتى لو فارغة ) بتكون truthy value و لغاية هنا تمام
طيب المفروض لما نقارن بين المصفوفة الفارغة و القيمة الرقمية صفر تكون نتيجة المقارنة دي false بما إن اﻷولى truthy و الصفر falsy , لكن هنا هنلاقي الجافا سكربت قررت تحول المصفوفة الفارغة إلى قيمة رقمية عشان تقارنها مع الصفر , و بالتالي حولتها إلى صفر
    
لاحظ إن المشغل == هنا هو اللي خلى الجافا سكربت تحول المصفوفة إلى قيمة رقمية عشان تقارنها مع الصفر , لكن نفس المشغل == في المثال السابق لم يحول القيمة null إلى قيمة رقمية عند مقارنتها بالصفر .. ده بقى اللي يعتبر بجد سلوك غريب 😂😂😂
    
        
مثال ثالث
    
if (undefined) // false
if (undefined == false) // false
if (!undefined == !false) // true
        
المثال ده بسيط جدا , و أول سطر فيه بيوضح إن القيمة undefined هي قيمة falsy زي ما قلنا , لكن عند مقارنة القيمة undefined مع القيمة المنطقية false الجافا سكربت مش بتحول أي قيمة للأخرى و بتكون نتيجة المقارنة false
طيب كان المنتظر بقى إن السطر اﻷخير يخرج نفس النتيجة و هي false لكن اللي حصل عكس ده , و برضوا التحليل منطقي جدا , المشغل Not ! الموجود قبل القيمة undefined وظيفته يجيب القيمة المنطقية المعاكسة ليها , فهول اﻷول هيحولها إلى قيمة منطقية ( undefined تتحول إلى false ) و بعدين يرجع عكسها اللي هو true , و يقارن ده مع قيمة عكس false .. لاحظ إن المشغل Not ! موجود قبل false برضوا فيجيب عكسها المنطقي اللي هو true , و طبعا بمقارنة true مع true تكون النتيجة النهائية true برضوا 😃
    
اﻷمثلة على غرابة منهجية الجافا سكربت في الموضوع ده كتيرة و ليست ذات أهمية , فقط المهم هو أن نعرف ما هي القيم التي تعتبر falsy values و ماذا يعني ذلك ☺
مشاركات ذات صلة