ECMAScript Boolean 运算符

Boolean 运算符非常重要,它使得程序语言得以正常运行。

Boolean 运算符有三种:NOT、AND 和 OR。

ToBoolean 操作

在学习各种逻辑运算符之前,让我们先了解一下 ECMAScript-262 v5 规范中描述的 ToBoolean 操作。

抽象操作 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 ໃນ ECMAScript ແມ່ນບໍ່ຄືກັບ NOT ໃນ C ແລະ Java.NOT ໃນການຄວາມຈິງຂອງນັກສານການຄົ້ນຫາຈະຕົກປ່ຽນຄວາມຈິງຂອງບັນດາພະຍານອື່ນໆມາອອກຄວາມຈິງ..

ພາບການດຳເນີນຂອງ NOT ໃນການຄວາມຈິງຂອງນັກສານການຄົ້ນຫາ ແມ່ນ:

  • ຖ້າມີບັນດາພະຍານແມ່ນວັດຖຸ, ຈະກັບຄືນຄວາມຈິງ.
  • ຖ້າມີບັນດາພະຍານແມ່ນຈຳນວນ 0, ຈະກັບຄືນຄວາມຈິງ.
  • ຖ້າມີບັນດາພະຍານບໍ່ແມ່ນຈຳນວນ 0, ຈະກັບຄືນຄວາມຈິງ.
  • ຖ້າມີບັນດາພະຍານ null, ຈະກັບຄືນຄວາມຈິງ.
  • ຖ້າມີບັນດາພະຍານ NaN, ຈະກັບຄືນຄວາມຈິງ.
  • ຖ້າມີບັນດາພະຍານ undefined, ຈະເກີດຄວາມຜິດພາດ.

ເກືອບທັງໝົດຄວາມຈິງຂອງນັກສານການຄົ້ນຫາແມ່ນເພື່ອຄວບຄຸມວົງກວ້າງ.

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

ໃນຄັ້ງນີ້ສະຫຼະການ Boolean (bFound) ຖືກນຳໃຊ້ເພື່ອບັນທຶກຄວາມສຳເລັດຂອງການຄົ້ນຫາ. ເມື່ອພົບວ່າມີຂໍ້ມູນຂອງບັນຫາຢູ່ໃນລະບົບ, bFound ຈະຖືກປ່ຽນແປງເປັນ true, !bFound ຈະເປັນ false, ໝາຍຄວາມວ່າການດຳເນີນຈະອອກຈາກບັນຍາວົງ.

ການພິຈາລະນາຄວາມຈິງຂອງພະຍານ ECMAScript ກໍ່ສາມາດໃຊ້ບົດສະຫຼະກຳ NOT ໃນການປະສານ. ການດຳເນີນນີ້ຕ້ອງມີສອງ NOT ໃນແຕ່ລະຈາກກົດສະຫຼະກຳຂອງການປະສານ. NOTທໍາອິດຈະຫຼຸດຄວາມຈິງຂອງບັນດາພະຍານອື່ນໆມາອອກຄວາມຈິງ. NOTທີສອງຈະການປະລິຫານຄວາມຈິງຂອງຄວາມຈິງອີກຄັ້ງ.

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 ໃນ Java, ເປັນການສັນຈອນທີ່ງາມ, ເຖິງວ່າຄູ່ມືທໍາອິດຈະມີຄວາມຕາຍວິທີການ, ຈະບໍ່ຖືກການສັນຈອນຄູ່ມືທີ່ສອງ. ສຳລັບວິທີການ AND, ຖ້າຄູ່ມືທໍາອິດແມ່ນ false, ຈະບໍ່ມີຄວາມຕາຍວິທີການທີ່ຈະຕາຍວິທີການ true.

ພິຈາລະນາຄວາມຄິດນີ້:

var bTrue = true;
var bResult = (bTrue && bUnknown);	//ເກີດຄວາມຜິດພາດ
alert(bResult);			//ການດຳເນີນການນີ້ຈະບໍ່ດຳເນີນ

ກິດຈະກຳນີ້ຈະເກີດຄວາມຜິດພາດໃນການສັນຈອນວິທີການ AND, ຍ້ອນຄູ່ມື bUnknown ມີຄຸນນະພາບ undefined. ຄຸນນະພາບ 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 ແມ່ນຄືກັກກັບ 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);			//ຈະບໍ່ດຳເນີນການນີ້