javascriptTruthy and falsyTruthy و Falsy در جاوااسکریپت
Truthy و Falsy مشخص میکنند یک مقدار در شرط جاوااسکریپت چگونه تفسیر شود؛ رشتهٔ '0'، آرایهٔ خالی و صفر را با خروجی واقعی مقایسه کنید.
مفهوم به زبان ساده
شرط #if-else لازم نیست از ابتدا مقدار true یا false باشد. جاوااسکریپت مقدار آن را در بافت شرط به بولی تفسیر میکند: مقداری که به true تبدیل شود truthy و مقداری که به false تبدیل شود falsy است. این نامها نوع تازهای در زبان نیستند؛ ویژگی رفتار مقدار هنگام بررسی شرطاند.
مقدارهای falsy شامل false، صفر مثبت و منفی، صفر BigInt، رشتهٔ خالی، null، undefined و NaN هستند. در مرورگر یک استثنای قدیمی به نام document.all هم وجود دارد که نباید در طراحی تازه به آن تکیه کرد. مقدارهای دیگر truthy هستند؛ بنابراین '0'، 'false'، آرایهٔ خالی و شیء خالی همگی در شرط، درست تفسیر میشوند. خالی بودن مجموعه با falsy بودن یکی نیست.
در نمونه، برای اینکه بدانیم فهرست خرید عضوی دارد، length را با صفر مقایسه میکنیم؛ خود آرایه همیشه پاسخ مناسب این پرسش نیست. برای نام کاربر نیز اگر رشتهٔ فقط شامل فاصله را خالی میدانیم، باید ابتدا trim انجام دهیم. این تصمیم به قرارداد داده وابسته است و Boolean بهتنهایی آن را انجام نمیدهد. همچنین اگر صفر یک نمرهٔ معتبر است، if (score) وجود نمره را درست تشخیص نمیدهد؛ برای نبودن، null یا undefined را بهصورت صریح بررسی کنید.
کجا به کار میآید؟
- تشخیص تفاوت نبود مقدار با مقدار معتبر صفر
- بررسی تعداد اعضای فهرست یا خالی نبودن متن پس از trim
از تعریف تا یک مثال واقعی
console.log(Boolean(0));
console.log(Boolean('0'));
console.log(Boolean('false'));
console.log(Boolean([]));
const cart = [];
console.log(cart.length > 0);
const name = ' ';
console.log(Boolean(name.trim()));
const score = 0;
console.log(score !== null && score !== undefined);
false true true true false false true
این مثال چطور کار میکند؟
صفر falsy است، ولی رشتهٔ غیرخالی '0' و رشتهٔ 'false' truthy هستند.
آرایهٔ خالی truthy است؛ cart.length > 0 پرسش واقعی دربارهٔ داشتن عضو را بیان میکند.
trim فاصلههای ابتدا و انتها را حذف میکند و در نمونه رشتهٔ خالی باقی میماند.
بررسی صریح null و undefined نشان میدهد نمرهٔ صفر همچنان یک مقدار موجود است.
اشتباه رایج
Boolean('false') برابر true است. اگر متن از تنظیمات یا فرم میآید، برای تبدیل قراردادهایی مثل 'true' و 'false' باید مقادیر مجاز را صریحاً مقایسه کنید.
این را به خاطر بسپارید
شرط را متناسب با پرسش بنویسید: وجود مقدار، داشتن عضو و خالی نبودن متن یک آزمون مشترک ندارند.