
بخش ۶: منطق بولین: مقادیر Truthy و Falsy (Boolean Logic: Truthy and Falsy Values)
این مفهوم یکی از پایهایترین و در عین حال قدرتمندترین مفاهیم در جاوااسکریپت است که درک آن برای نوشتن کدهای تمیز و بهینه ضروری است.
مفاهیم کلیدی:
۱. مقادیر Falsy (نادرستنما):
این مقادیر وقتی در context بولین استفاده شوند، معادل false در نظر گرفته میشوند. فقط ۶ مقدار falsy در جاوااسکریپت وجود دارد:
false
0
"" یا '' (رشته خالی)
null
undefined
NaNمثال:
if ("") {
console.log("این اجرا نمیشود");
} else {
console.log("رشته خالی falsy است"); // این اجرا میشود
}۲. مقادیر Truthy (درستنما):
هر مقداری که جزو ۶ مورد بالا نباشد، truthy است و معادل true در نظر گرفته میشود.
// نمونههایی از مقادیر truthy
if ("hello") console.log("رشته غیرخالی"); // اجرا میشود
if (42) console.log("اعداد غیرصفر"); // اجرا میشود
if ([]) console.log("آرایه خالی"); // اجرا میشود
if ({}) console.log("شیء خالی"); // اجرا میشود
if (function() {}) console.log("تابع"); // اجرا میشود۳. عملگرهای منطقی و رفتار آنها:
عملگر AND (&&):
- اولین falsy value را برمیگرداند
- اگر همه truthy باشند، آخرین value را برمیگرداند
console.log("hello" && 42); // 42
console.log(0 && "world"); // 0عملگر OR (||):
- اولین truthy value را برمیگرداند
- اگر همه falsy باشند، آخرین value را برمیگرداند
console.log("" || "fallback"); // "fallback"
console.log(0 || null || "value"); // "value"عملگر Nullish Coalescing (??):
- اولین value که
nullیاundefinedنباشد را برمیگرداند
console.log(0 ?? "default"); // 0
console.log(null ?? "default"); // "default"
console.log(undefined ?? "fallback"); // "fallback"۴. کاربردهای عملی:
// مقدار پیشفرض برای متغیرها
let username = "";
let displayName = username || "میهمان";
console.log(displayName); // "میهمان"
// اعتبارسنجی ورودی
function validateInput(input) {
if (!input) {
return "ورودی نامعتبر است";
}
return "ورودی معتبر است";
}
// شرطهای کوتاه
isLoggedIn && showDashboard();ارزیابی بخش ۶:
سؤال ۱: پیشبینی خروجی خروجی هر خط از کد زیر چیست؟
console.log(Boolean(""));
console.log(Boolean("0"));
console.log(Boolean(0));
console.log(Boolean(null));
console.log(Boolean([]));
console.log(Boolean({}));سؤال ۲: تحلیل عملگرهای منطقی خروجی هر عبارت زیر چیست؟
console.log("hello" && 42);
console.log(0 && "world");
console.log("" || "fallback");
console.log("value" || "fallback");
console.log(null ?? "default");
console.log(0 ?? "default");سؤال ۳: نوشتن تابع کاربردی تابعی بنویسید که یک پارامتر دریافت کند و اگر پارامتر falsy بود، مقدار پیشفرض “مقدار نامعتبر” را برگرداند، در غیر این صورت خود پارامتر را برگرداند.
پاسخهای شما:
- خروجی کد:
false, true, false, false, true, true - عملگرهای منطقی:
42, 0, fallback, value, default, 0 - تابع:
function isFulsy(a) { if(a) return a; else return "مقدار نامعتبر"; }
بازخورد و تحلیل پاسخهای شما:
سؤال ۱: پیشبینی خروجی (کاملاً صحیح ✅)
console.log(Boolean("")); // ✅ false (صحیح)
console.log(Boolean("0")); // ✅ true (صحیح - رشته غیرخالی)
console.log(Boolean(0)); // ✅ false (صحیح)
console.log(Boolean(null)); // ✅ false (صحیح)
console.log(Boolean([])); // ✅ true (صحیح - آرایه خالی truthy است)
console.log(Boolean({})); // ✅ true (صحیح - شیء خالی truthy است)پاسخهای شما کاملاً درست است! شما به خوبی مفهوم truthy و falsy را درک کردهاید.
سؤال ۲: تحلیل عملگرهای منطقی (کاملاً صحیح ✅)
console.log("hello" && 42); // ✅ 42 (صحیح - آخرین truthy)
console.log(0 && "world"); // ✅ 0 (صحیح - اولین falsy)
console.log("" || "fallback"); // ✅ "fallback" (صحیح - اولین truthy)
console.log("value" || "fallback"); // ✅ "value" (صحیح - اولین truthy)
console.log(null ?? "default"); // ✅ "default" (صحیح - اولین non-null/undefined)
console.log(0 ?? "default"); // ✅ 0 (صحیح - 0 جزو null/undefined نیست)شما رفتار عملگرهای منطقی را به طور کامل و دقیق درک کردهاید!
سؤال ۳: نوشتن تابع کاربردی (صحیح با امکان بهبود ✅)
تابع شما کاملاً درست کار میکند، اما میتوان آن را به صورت حرفهایتر نوشت:
// نسخه فعلی شما (صحیح):
function isFulsy(a) {
if(a) return a;
else return "مقدار نامعتبر";
}
// نسخه بهبود یافته با عملگر منطقی:
function validateValue(value) {
return value || "مقدار نامعتبر";
}
// یا با شرط ternary:
function validateValue(value) {
return value ? value : "مقدار نامعتبر";
}
// تست توابع
console.log(validateValue("test")); // "test"
console.log(validateValue("")); // "مقدار نامعتبر"
console.log(validateValue(0)); // "مقدار نامعتبر"
console.log(validateValue(null)); // "مقدار نامعتبر"نکات بهبود:
- استفاده از عملگر منطقی
||برای کوتاهتر شدن کد - نامگذاری واضحتر تابع (
validateValueبه جایisFulsy) - توجه: تابع شما برای مقدار
0و""نیز “مقدار نامعتبر” برمیگرداند
جمعبندی نهایی بخش ۶:
شما مفاهیم مهم truthy/falsy و عملگرهای منطقی را به طور کامل فرا گرفتهاید:
- ✅ تشخیص دقیق ۶ مقدار falsy
- ✅ درک رفتار عملگرهای
&&،||و?? - ✅ توانایی نوشتن توابع کاربردی با استفاده از این مفاهیم
نکات مهم برای توسعهدهنده ارشد:
- از عملگر
??زمانی استفاده کنید که فقط میخواهیدnullوundefinedرا فیلتر کنید - از عملگر
||زمانی استفاده کنید که همه مقادیر falsy را میخواهید فیلتر کنید - همیشه به رفتار خاص آرایهها و اشیای خالی (که truthy هستند) توجه داشته باشید