در جاوا اسکریپت، هر مقدار دارای یک معادل بولی است. این بدان معنی است که می توان آن را به عنوان درست (مقدار true) یا نادرست (مقدار false) در شرایط بولی ارزیابی کرد.
اما context بولی چیست؟ این وضعیتی است که در آن مقدار بولی مورد انتظار است. به عنوان مثال می توان به دستورات if، عملگرهای منطقی و غیره اشاره کرد. وقتی از یک مقدار غیر بولی در context بولی استفاده می کنید، جاوا اسکریپت مقدار را به معادل بولی خود تبدیل می کند.
در این مقاله با مقادیر نادرست (falsy values) در جاوا اسکریپت و نحوه بررسی نادرست بودن یک مقدار آشنا خواهید شد. این مقاله همچنین برخی از بهترین روشها را پوشش میدهد که باید هنگام بررسی معادل بولی یک مقدار در نظر گرفته شوند.
شش مقدار نادرست (falsy values) در جاوا اسکریپت
مقادیر نادرست یا همان falsy values در جاوا اسکریپت منحصر به فرد هستند زیرا تنها شش عدد از آنها وجود دارد. به غیر از این شش، همه مقدرا های دیگر مقدار های درست هستند. شما می توانید این مقادیر نادرست را به حافظه وارد کنید. به این ترتیب، وقتی به مقداری برخورد میکنید که یکی از آن شش عدد نیست، میدانید که یک ارزش true است.
در اینجا شش مقدار نادرست در جاوا اسکریپت آمده است:
false
: مقدار بولی false.0
: عدد صفر.""
یا ''
یا``
: یک رشته خالی.null
: کلمه کلیدی null
که نشان دهنده بدون مقدار اولیه بودن هر مقدار شی است.undefined
: کلمه کلیدی تعریف نشده که یک مقدار اولیه را نشان می دهد.NaN
: مخفف "Not a Number
" است. این مقدار خاصی را نشان می دهد که از یک عملیات بازگردانده شده است که باید یک مقدار عددی را برگرداند اما این کار را نمی کند.
حال، بیایید چند نمونه عملی از این مقادیر نادرست را در جاوا اسکریپت ببینیم.
مثال 1 - مقدار بولی false
let isOnline = false
function checkStatus(status) {
return Boolean(status) ? "ONLINE" : "OFFLINE"
}
checkStatus(isOnline) // "OFFLINE"
وقتی متغیر isOnline
را به تابع checkStatus
میدهید، رشته «OFFLINE» را برمیگرداند. و این به این دلیل است که مقدار در این زمینه نادرست است. در اینجا، ما از یک عملگر tenary بر اساس مقدار بولی آرگومان status
استفاده می کنیم.
مثال 2 - عدد صفر
let unreadMessages = 0
let hasUnreadMessages = Boolean(unreadMessages)
console.log(hasUnreadMessages) // false
این مثال بررسی می کند که آیا کاربر پیام های خوانده نشده دارد یا خیر. ما از تابع Boolean
ساخته شده برای بدست آوردن مقدار بولی متغیر UnreadMessages
استفاده می کنیم. این بدان معناست که هر زمان که تعداد پیامهای خوانده نشده صفر باشد، hasUnreadMessages
نادرست خواهد بود.
مثال 3 - یک رشته خالی
let userInput = "";
let defaultText = "No input provided";
let displayText = Boolean(userInput) || defaultText;
console.log(displayText); // No input provided
این مثال از عملگر منطقی OR
||
استفاده می کند برای تعیین مقدار displayText
. اگر مقداری true باشد، مقدار userInput
را به displayText
اختصاص میدهد. یا اگر userInput
یک مقدار نادرست باشد، همانطور که در این مورد وجود دارد، defaultText
را به displayText
اختصاص می دهد.
مثال 4 - مقدار null
let user = null;
if (user && user.name) {
console.log("Welcome, " + user.name + "!");
} else {
console.log("Please log in to access the website.");
}
مثال زیر فرض می کند که کاربر وارد نشده است و بنابراین مقدار شی کاربر null
است. این به این معنی است که عبارت if
به نادرست ارزیابی می شود. رفتار مورد انتظار این خواهد بود که کد بلوک else
را اجرا کند.
مثال 5 - مقدار تعریف نشده undefined
let age;
if (age === undefined) {
console.log("The age is undefined.");
}
زمانی که متغیری اعلان می شود اما با مقداری مقدار دهی اولیه نمی شود، جاوا اسکریپت مقدار پیش فرض، تعریف نشده (undefined
) را به آن اختصاص می دهد. در مثال کد بالا، از آنجایی که متغیر age
اعلام شده است اما مقداری به آن اختصاص داده نشده است، مقدار آن تعریف نشده است. این بدان معناست که کد موجود در دستور if
اجرا خواهد شد.
مثال 6 - مقدار NaN
let value1 = "Ten"
let value2 = 10
let result = value1 / value2
if (isNaN(result)) {
console.log("The result is not a number.");
} else {
console.log(result);
}
این مثال value1
(رشته) را بر value2
(عدد) تقسیم می کند. این به یک مقدار NaN
منجر می شود زیرا نمی توانید یک رشته را بر یک عدد تقسیم کنید. این بدان معناست که کد موجود در بلوک if
اجرا خواهد شد.
چگونه بررسی کنیم که آیا یک مقدار در جاوا اسکریپت نادرست است یا خیر
یک راه مطمئن برای بررسی نادرست بودن یا نبودن یک مقدار، استفاده از تابع Boolean
است. تابع Boolean
مقدار بولی مقدار آرگومان ارسال شده به آن را برمی گرداند.
مثال:
console.log(Boolean(false)) //false
console.log(Boolean(0)) //false
console.log(Boolean("")) //false
console.log(Boolean(null)) //false
console.log(Boolean(undefined)) //false
console.log(Boolean(NaN)) //false
در اینجا، ما مقدار بولی هر شش مقدار نادرست را بررسی می کنیم. و همانطور که انتظار می رود، هر کدام false
برمی گردند.
وقتی هر مقدار دیگری که یکی از این شش مقدار نادرست بالا نیست را به تابع Boolean
ارسال می کنید، مقدار true
برمی گردد.
مثال:
console.log(Boolean('hello')) //true
console.log(Boolean(24)) //true
جهت کسب اطلاعات بیشتر از تفاوت بین اکمااسکریپت و جاوااسکریپت می توانید این مقاله را بررسی کنید.
مقدار های true
که ممکن است به عنوان مقدار های Falsy ظاهر شوند
برخی از مقدار های true وجود دارد که در یک نگاه، ممکن است مقدار های نادرستی به نظر برسند، اما اینطور نیستند. همانطور که قبلا ذکر شد، تنها شش مقدار در جاوا اسکریپت مقادیر نادرست هستند. هر چیز غیر از اون یک مقدار درست است.
موارد زیر برخی از آن مقادیری هستند که نادرست نیستند اما ممکن است به این صورت ظاهر شوند.
console.log(Boolean('false')) // An empty object
console.log(Boolean(' ')) // An empty object
console.log(Boolean('0')) // An empty object
console.log(Boolean([])) // An empty array
console.log(Boolean({})) // An empty object
سه رشته اول حاوی متنی است که ممکن است شبیه مقادیر نادرست باشد. اولی رشته ای با متن "false
"، دومی با مقداری فضای خالی (
) و سومی با صفر است.
به یاد داشته باشید که تنها رشته ای که به عنوان مقدار نادرست در نظر گرفته می شود، یک رشته خالی است. تمام رشتههای غیر خالی در جاوا اسکریپت مقادیر درستی هستند که فقط رشتههایی با فاصله خالی هستند.
همچنین، توجه داشته باشید که بر خلاف رشته ها، هم یک آرایه خالی و هم یک شی خالی در یک زمینه بولی true برمی گردند.
بهترین روش ها هنگام بررسی معادل بولی
نکات زیر به خوانایی بیشتر کد شما و نگهداری آسان تر کمک می کند.
1. از تابع Boolean استفاده کنید
زمانی که میخواهید درستی یا نادرستی یک مقدار را بررسی کنید، همیشه بهتر است از تابع Boolean داخلی استفاده کنید. تابع با وادار کردن هر مقدار به بولی مربوطه کار می کند. همچنین قصد شما را برای هر کسی که کد را می خواند روشن می کند.
مثال:
// Example without the Boolean function
const value = '';
if (value) {
console.log('It is a TRUTHY value');
} else {
console.log('It is a FALSY value');
}
// Example with the Boolean function
const value = ''
if (Boolean(value)) {
console.log('It is a TRUTHY value');
} else {
console.log('It is a FALSY value');
}
هر دو نمونه یک کار را انجام می دهند. اما در مثال دوم، واضح است که شما نمایش بولی مقدار داده شده را بررسی می کنید.
2. به جای برابری آزاد == از برابری دقیق === استفاده کنید
هنگامی که مقادیر را برای درستی یا نادرستی مقایسه می کنید، توصیه می شود از برابری دقیق (===) به جای برابری ضعیف (==) استفاده کنید. برابری دقیق هم مقدار و هم نوع را با هم مقایسه می کند. برابری == قبل از مقایسه مقادیر، اجبار نوع را انجام می دهد و این می تواند منجر به نتایج غیرمنتظره شود.
مثال:
// Strict Equality Example
if (1 === [1]) {
console.log('EQUAL')
} else {
console.log('NOT EQUAL')
}
// NOT EQUAL
مثال دیگر:
// Loose Equality Example
if (1 == [1]) {
console.log('EQUAL')
} else {
console.log('NOT EQUAL')
}
//EQUAL
هر دو مثال بالا مقادیر یکسانی را با هم مقایسه می کنند. اما مثال برابری دقیق "NOT EQUAL" را ثبت می کند. این به این دلیل است که عدد 1 با یک آرایه حاوی عدد 1 برابر نیست. با Loose Equality
، نوع مقادیر را مجبور می کند تا آنها را از یک نوع بسازد. به همین دلیل است که "EQUAL" را در کنسول چاپ می کند.
3. برای مستند کردن کد خود کامنت بنویسید
برای اینکه کد خود را خواناتر و نگهداری آسان تر کنید، در صورت لزوم نظراتی را اضافه کنید تا منطق خود را هنگام برخورد با مقادیر درست و نادرست توضیح دهید.
مستندسازی کد شما تمرین خوبی برای کمک به توسعه دهندگان تیم شما (یا خود آینده شما) است که رفتار مورد نظر یک قطعه کد را درک کنند.
مثال:
let selectedUser = USER_OBJ
// Check if no user is selected
if (!selectedUser) {
console.log("Please select a user.");
} else {
console.log("User address: " + selectedUser.address);
}
در مثال بالا، کامنت اضافه شده قبل از دستور if به وضوح نشان می دهد که کد در حال بررسی است که آیا هیچ کاربری انتخاب نشده است.
استفاده از عملگر منطقی NOT (!) میتواند اینطور به نظر برسد که شما در حال بررسی انتخاب کاربر هستید نه اینکه بررسی کنید آیا کاربر انتخاب نشده است. بنابراین یک کامنت در نمونه ای مانند این به ارائه وضوح کمک می کند.
نتیجه
در این مقاله با شش مقدار نادرست در جاوا اسکریپت و تفاوت آنها با مقادیر true آشنا شده اید. شما همچنین در مورد برخی از مقدار های true که ممکن است نادرست به نظر برسند، اما در واقع اینطور نیستند، یاد گرفتید. و همچنین برخی از بهترین روشها را در هنگام کار با مقادیر نادرست مشاهده کردید.
درک خوب مفهوم مقادیر نادرست و درست و نحوه تأثیر آنها بر مقایسه ها و عبارات شرطی هنگام اشکال زدایی برنامه های جاوا اسکریپت مفید خواهد بود.