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); //ຈະບໍ່ດຳເນີນການນີ້
- ກ່ອນການຄົ້ນຄວ້າ ຄູ່ຄວາມບໍ່ສະເພາະ
- ຫລັງການຄົ້ນຄວ້າ ຄູ່ຄວາມສິ່ງນັບຕາມ