چهار عملگر منطقی در جاوااسکریپت وجود دارد: || (OR)، && (AND)، ! (NOT)، ?? (Nullish Coalescing). اینجا ما سه تای اول را پوشش می دهیم، عملگر ?? در مقاله بعدی است.
با اینکه آنها “منطقی” نام برده می شوند، می توانند روی هر نوع مقداری اعمال شوند، نه فقط نوع بولین. نتیجه آنها هم می تواند از هر نوعی باشد.
بیایید جزییات را ببینیم.
|| (OR)
عملگر “OR(یا)” با نماد دو خط عمودی نمایش داده می شود:
result = a || b;
در برنامه نویسی کلاسیک، عملگر منطقی OR تنها با مقدار های بولین کار می کرد. اگر هر کدام از آرگومان های آن true باشد، ture بر می گرداند، در غیر این صورت false بر می گرداند.
در جاوااسکریپت، این عملگر مقداری فوت و فن و قدرت بیشتری دارد. اما اول، بیایید ببینیم با مقدار های بولین چه اتفاقی می افتد.
چهار ترکیب احتمالی منطقی وجود دارد:
alert( true || true ); // true
alert( false || true ); // true
alert( true || false ); // true
alert( false || false ); // false
همانطور که می بینیم، نتیجه همیشه true است به جز موقعی که هر دو عملوند false باشند.
اگر یک عملوند بولین نباشد، برای ارزیابی به بولین تبدیل می شود.
برای مثال، با عدد 1 مانند true رفتار می شود، با عدد 0 مانند false:
if (1 || 0) { // همانند if( true || false ) کار میکند
alert( 'truthy!' );
}
اکثر اوقات، OR || در یک دستور if استفاده می شود تا بررسی شود که آیا هر کدام از شرط های داده شده true هست یا نه.
برای مثال:
let hour = 9;
if (hour < 10 || hour > 18) {
alert( 'اداره بسته است.' );
}
ما می توانیم شرط های بیشتری قرار بدهیم:
let hour = 12;
let isWeekend = true;
if (hour < 10 || hour > 18 || isWeekend) {
alert( 'اداره بسته است.' ); // آخر هفته است
}
OR "||" اولین مقدار truthy را پیدا می کند
منطقی که بالا توصیف شد تا حدی کلاسیک است. الان، بیایید وارد ویژگی های “اضافه” جاوااسکریپت شویم.
الگوریتم توسعه یافته به صورت زیر عمل می کند.
چند مقدار همراه با OR وارد می کنیم:
result = value1 || value2 || value3;
عملگر OR || مراحل پایین را انجام می دهد:
- عملوند ها را از چپ به راست ارزیابی می کند.
- هر عملوند را، تبدیل به بولین می کند. اگر نتیجه
trueباشد، متوقف می شود و مقدار اصلی عملوند را بر می گرداند. - اگر تمام عملوند ها ارزیابی شدند (یعنی تمام آنها
falseبودند)، عملوند آخر را بر می گرداند.
هر مقدار با شکل اصلی خود و بدون تبدیل بر گردانده می شود.
به عبارتی دیگر، یک زنجیره از OR || اولین مقدار truthy یا در صورتی که هیج مقدار truthy پیدا نشود آخرین مقدار را بر می گرداند.
برای مثال:
alert( 1 || 0 ); // 1 (1 is truthy)
alert( null || 1 ); // 1 (1 is the first truthy value)
alert( null || 0 || 1 ); // 1 (the first truthy value)
alert( undefined || null || 0 ); // 0 (all falsy, returns the last value)
این باعث چند استفاده جالب نسبت به “OR خالص، کلاسیک، فقط-بولین” می شود.
-
گرفتن اولین مقدار truthy از یک لیست متغیر ها یا عبارت ها.
برای مثال، ما متغیر های
firstName،lastNameوnickNameداریم، همه آنها اختیاری هستند (یعنی می توانند undefined یا مقدارهای falsy داشته باشند).بیایید با استفاده از OR
||متغیری که دارای داده است را انتخاب کنیم و آن را نمایش دهیم (یا اگر چیزی تنظیم نشده باشد"Anonymous"را):let firstName = ""; let lastName = ""; let nickName = "SuperCoder"; alert( firstName || lastName || nickName || "Anonymous"); // SuperCoderاگر تمام متغیر ها falsy بودند،