ECMAScript Boolean অপারেটর

Boolean অপারেটর খুবই গুরুত্বপূর্ণ, যা প্রোগ্রামিং ভাষার সুচারু কাজকর্মকে সম্ভব করে দেয়

Boolean অপারেটর তিনটি: NOT, AND এবং OR

ToBoolean অপারেশন

বিভিন্ন লজিক অপারেটরকে শিখতে আগে, আমরা প্রথমে ECMAScript-262 v5 নিয়মকে বর্ণিত ToBoolean অপারেশন নিয়ে জানতে চাই

অভিকল্পিত অপারেশন ToBoolean তার পারামিটারকে নিচের তালিকায় বর্ণিত নিয়ম অনুযায়ী বোলিয়ান মানে রূপান্তরিত করে

পারামিটারের ধরন 结果
অসুনির্দিষ্ট false
নিল false
বলীয় ফলাফল ইনপুট পারামিটারের সমান (নিষ্ক্রিয় পরিবর্তন করা হবে না)
নম্বর যদি পারামিটার +0, -0 বা NaN হোক, তবে ফলাফল false হবে; না তবে true হবে。
স্ট্রিং যদি পারামিটার খালি স্ট্রিং হোক, তবে ফলাফল false হবে; না তবে true হবে。
অবজেক্ট true

লজিক নট অপারেটর

ECMAScript-এ, NOT লজিক্যাল অপারেটর C এবং Java-এর NOT লজিক্যাল অপারেটরের মতো, যেটি ডট অক্ষর (!) দ্বারা চিহ্নিত হয়।

যেমনই NOT, 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 সত্য হয় এবং !bFound মান হয় false, যার মানে প্রক্রিয়াটি while লুপ থেকে বের হয়。

ECMAScript ভাবা ভেক্টরের Boolean মান পরীক্ষা করতে, NOT লজিক্যাল অপারেটর ব্যবহার করা যেতে পারে। এটা একটি লাইনে দুটি NOT অপারেটর ব্যবহার করে করা হয়। যেমন কোনো মান কোনো হোক, প্রথম NOT অপারেটর বলিনিয়াল মান ফেরত দেয়। দ্বিতীয় 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 অপারেশনের মতো, ECMAScript-তেও লজিক্যাল AND অপারেশন একটি সহজ অপারেশন, যার মান প্রথম অপারেন্ডারের দ্বারা নির্ধারিত হয়, তারপর দ্বিতীয় অপারেন্ডারকে গণনা করা হবে না।লজিক্যাল 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 运算符

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);			//不会执行这一行