عملگرهای Boolean ECMAScript

عملگرهای Boolean بسیار مهم هستند و باعث می‌شوند زبان برنامه‌نویسی به درستی کار کند.

عملگرهای Boolean سه نوع دارند: NOT، AND و OR.

عملیات ToBoolean

قبل از اینکه به انواع عملگرهای منطقی بپردازیم، بیایید ابتدا عملیات ToBoolean که در استاندارد ECMAScript-262 v5 توضیح داده شده است را بشناسیم.

عملیات انتزاعی ToBoolean بر اساس قوانین زیر پارامتر خود را به مقدار منطقی تبدیل می‌کند:

نوع پارامتر نتیجه
Undefined false
Null false
Boolean نتیجه برابر با پارامتر ورودی (بدون تغییر) خواهد بود
Number اگر پارامتر +0، -0 یا NaN باشد، نتیجه false خواهد بود؛ در غیر این صورت true خواهد بود.
String اگر پارامتر یک رشته خالی باشد، نتیجه false خواهد بود؛ در غیر این صورت true خواهد بود.
Object true

عملگر NOT

در ECMAScript، عملگر NOT منطقی مانند عملگر NOT منطقی در C و Java است و با علامت تعجب (!) نشان داده می‌شود.

برخلاف عملگرهای OR و AND منطقی،عملگر NOT منطقی همیشه مقدار Boolean برمی‌گرداند.

رفتار عملگر NOT منطقی به شرح زیر است:

  • اگر مقدار یک شیء باشد، false برمی‌گرداند
  • اگر مقدار عدد صفر باشد، true برمی‌گرداند
  • اگر مقدار عددی غیر صفر باشد، false برمی‌گرداند
  • اگر مقدار null باشد، true برمی‌گرداند
  • اگر مقدار NaN باشد، true برمی‌گرداند
  • اگر مقدار undefined باشد، خطا رخ می‌دهد

معمولاً، این عملگر برای کنترل حلقه‌ها استفاده می‌شود:

var bFound = false;
var i = 0;
while (!bFound) {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  }
    i++;
  }
}

در این مثال، متغیر Boolean (bFound) برای ثبت موفقیت یا عدم موفقیت جستجو استفاده می‌شود. هنگامی که داده مورد نظر پیدا می‌شود، bFound به true تنظیم می‌شود، !bFound برابر با false است، که به این معناست که اجرا از حلقه while خارج می‌شود.

در حال ارزیابی مقدار Boolean متغیرهای ECMAScript می‌توان از عملگر NOT منطقی استفاده کرد. برای این کار نیاز به استفاده از دو عملگر NOT در یک خط کد است. عملگر NOT اولیشه مقدار Boolean را برمی‌گرداند. عملگر NOT دوم مقدار Boolean را منفی می‌کند، بنابراین مقدار واقعی Boolean متغیر را ارائه می‌دهد.

var bFalse = false;
var sRed = "red";
var iZero = 0;
var iThreeFourFive = 345;
var oObject = new Object;
document.write("مقدار منطقی bFalse است " + (!!bFalse));
document.write("مقدار منطقی sRed است " + (!!sRed));
document.write("مقدار منطقی iZero است " + (!!iZero));
document.write("مقدار منطقی iThreeFourFive است " + (!!iThreeFourFive));
document.write("مقدار منطقی oObject است " + (!!oObject));

نتیجه:

مقدار منطقی bFalse false است
مقدار منطقی sRed true است
مقدار منطقی iZero false است
مقدار منطقی iThreeFourFive true است
مقدار منطقی oObject true است 

عملگر منطقی AND

در ECMAScript، عملگر منطقی AND با دو و علامت و (&&) نمایش داده می‌شود:

مثال:

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

جدول ارزش‌های واقعی عملگر منطقی AND رفتار آن را توضیح می‌دهد:

عملگر 1 عملگر 2 نتیجه
true true true
true false false
false true false
false false false

عملگرهای عملگر منطقی AND می‌توانند هر نوعی باشند، نه فقط مقدارهای Boolean.

اگر یکی از عملگرها مقدار اصلی Boolean نباشد، عملگر منطقی AND لزوماً مقدار Boolean برمی‌گرداند:

  • اگر یکی از عملگرها اشیا و دیگری Boolean باشد، اشیا برمی‌گرداند.
  • اگر هر دو عملگر اشیاء باشند، اشیای دومین برمی‌گرداند.
  • اگر یکی از عملگرها null باشد، مقدار null برمی‌گرداند.
  • اگر یکی از عملگرها NaN باشد، مقدار NaN برمی‌گرداند.
  • اگر یکی از عملگرها undefined باشد، خطا رخ می‌دهد.

مانند عملگر منطقی AND در زبان برنامه‌نویسی Java، عملگر منطقی AND در ECMAScript نیز یک عملگر ساده است، یعنی اگر مقدار اولین عملگر تعیین‌کننده نتیجه باشد، دیگر مقدار دومین عملگر محاسبه نمی‌شود. برای عملگر منطقی AND، اگر مقدار اولین عملگر false باشد، مهم نیست که مقدار دومین عملگر چیست، نتیجه نمی‌تواند برابر با true باشد.

به این مثال توجه کنید:

var bTrue = true;
var bResult = (bTrue && bUnknown);	// خطا رخ می‌دهد
alert(bResult);			// این خطا اجرا نمی‌شود

این کد در هنگام انجام عملگر منطقی AND باعث خطا می‌شود، زیرا متغیر bUnknown تعریف نشده است. مقدار متغیر bTrue true است، زیرا عملگر منطقی AND به محاسبه متغیر bUnknown ادامه می‌دهد. این کار باعث خطا می‌شود، زیرا مقدار bUnknown undefined است و نمی‌تواند در عملگر منطقی AND استفاده شود.

اگر این مثال را تغییر دهید و اولین عدد را به false تنظیم کنید، هیچ خطایی رخ نخواهد داد:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult);			// نمایش "false"

در این کد، اسکریپت مقادیر عملگر منطقی AND را نمایش می‌دهد، که به معنای رشته "false" است. حتی اگر مقدار متغیر bUnknown undefined باشد، آن را محاسبه نمی‌کند، زیرا مقدار اولین عملگر false است.

توجه:در استفاده از عملگرهای منطقی AND، باید به این ویژگی‌های ساده‌سازی شده آن توجه کرد.

عملگرهای منطقی OR

عملگرهای منطقی OR در ECMAScript مانند عملگرهای منطقی OR در Java هستند و با دو خط افقی (||) نمایش داده می‌شوند:

var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;

جدول ارزش‌های واقعی زیر رفتار عملگرهای منطقی OR را توضیح می‌دهد:

عملگر 1 عملگر 2 نتیجه
true true true
true false true
false true true
false false false

مانند عملگرهای منطقی AND، اگر یکی از عملگرها غیر Boolean باشد، عملگرهای منطقی OR ممکن است که Boolean برنمی‌گردد:

  • اگر یکی از عملگرها اشیاء است و مقدار عملگرهای چپ آن‌ها false هستند، اشیاء برمی‌گردد.
  • اگر هر دو عملگر اشیاء هستند، اولین اشیاء برمی‌گردد.
  • اگر آخرین عملگر null باشد و مقدار سایر عملگرها false باشد، نتیجه null است.
  • اگر آخرین عملگر NaN باشد و مقدار سایر عملگرها false باشد، نتیجه NaN است.
  • اگر یکی از عملگرها undefined باشد، خطا رخ می‌دهد.

مانند عملگرهای منطقی AND، عملگرهای منطقی OR نیز عملگرهای ساده‌ای هستند. برای عملگرهای منطقی OR، اگر مقدار اولین عملگر true باشد، دیگر محاسبه برای دومین عملگر انجام نمی‌شود.

مثال:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//"true" نمایش داده می‌شود

مانند مثال‌های قبلی، متغیر bUnknown تعریف نشده است. اما به دلیل اینکه مقدار متغیر bTrue true است، bUnknown محاسبه نمی‌شود و نتیجه "true" است.

اگر bTrue را به false تغییر دهید، خطا رخ می‌دهد:

var bFalse = false;
var bResult = (bFalse || bUnknown);	//خطا رخ می‌دهد
alert(bResult);			//این خط اجرا نمی‌شود