Toán tử Boolean ECMAScript
- Trang trước toán tử bit
- Trang tiếp theo toán tử nhân
Toán tử Boolean rất quan trọng, nó giúp ngôn ngữ lập trình hoạt động.
Toán tử Boolean có ba loại: NOT, AND và OR.
Công tác ToBoolean
Trước khi học các toán tử logic, hãy cùng tìm hiểu về công tác ToBoolean được mô tả trong quy tắc ECMAScript-262 v5.
Công tác抽象 ToBoolean chuyển đổi tham số của nó theo quy tắc trong bảng sau:
Loại tham số | Kết quả |
---|---|
Undefined | false |
Null | false |
Boolean | Kết quả bằng tham số đầu vào (không chuyển đổi) |
Number | Nếu tham số là +0, -0 hoặc NaN, thì kết quả là false; ngược lại là true. |
String | Nếu tham số là chuỗi rỗng, thì kết quả là false; ngược lại là true. |
Object | true |
Điều kiện NOT
Trong ECMAScript, toán tử NOT luận lý tương tự như toán tử NOT luận lý trong C và Java, đều được biểu thị bằng dấu chấm hỏi (!).
Khác với toán tử OR và AND luận lý,Toán tử NOT luận lý luôn trả về giá trị Boolean.
Hành vi của toán tử NOT luận lý như sau:
- Nếu đối tượng là đối tượng, trả về false
- Nếu đối tượng là số 0, trả về true
- Nếu đối tượng là số khác 0, trả về false
- Nếu đối tượng là null, trả về true
- Nếu đối tượng là NaN, trả về true
- Nếu đối tượng là undefined, xảy ra lỗi
Thường thì toán tử này được sử dụng để kiểm soát vòng lặp:
var bFound = false; var i = 0; while (!bFound) { if (aValue[i] == vSearchValues) { bFound = true; } i++; } }
Trong ví dụ này, biến Boolean (bFound) được sử dụng để ghi lại việc tìm kiếm có thành công hay không. Khi tìm thấy mục dữ liệu trong vấn đề, bFound sẽ được đặt thành true, !bFound sẽ bằng false, có nghĩa là chương trình sẽ thoát khỏi vòng lặp while.
Khi kiểm tra giá trị Boolean của biến ECMAScript, bạn cũng có thể sử dụng toán tử NOT luận lý. Việc này yêu cầu sử dụng hai toán tử NOT trong một dòng mã. Mặc dù đối tượng là gì đi chăng nữa, toán tử NOT đầu tiên sẽ trả về giá trị Boolean. Toán tử NOT thứ hai sẽ lấy ngược giá trị Boolean này, từ đó cho giá trị Boolean thực sự của biến.
var bFalse = false; var sRed = "red"; var iZero = 0; var iThreeFourFive = 345; var oObject = new Object; document.write("Giá trị luận lý của bFalse là " + (!!bFalse)); document.write("Giá trị luận lý của sRed là " + (!!sRed)); document.write("Giá trị luận lý của iZero là " + (!!iZero)); document.write("Giá trị luận lý của iThreeFourFive là " + (!!iThreeFourFive)); document.write("Giá trị luận lý của oObject là " + (!!oObject));
Kết quả:
Giá trị logic của bFalse là false Giá trị logic của sRed là true Giá trị logic của iZero là false Giá trị logic của iThreeFourFive là true Giá trị logic của oObject là true
Toán tử logic AND
Trong ECMAScript, toán tử logic AND được biểu diễn bằng dấu hai và (&&):
Ví dụ:
var bTrue = true; var bFalse = false; var bResult = bTrue && bFalse;
Bảng giá trị thực của toán tử logic AND mô tả hành vi của nó:
Phép toán số 1 | Phép toán số 2 | Kết quả |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
Toán tử phép toán logic AND có thể là bất kỳ loại nào, không chỉ là giá trị Boolean.
Nếu một toán tử không phải là giá trị Boolean nguyên thuỷ, phép toán logic AND không nhất thiết trả về giá trị Boolean:
- Nếu một toán tử là đối tượng, toán tử thứ hai là giá trị Boolean, trả về đối tượng đó.
- Nếu cả hai toán tử đều là đối tượng, trả về đối tượng thứ hai.
- Nếu một toán tử là null, trả về null.
- Nếu một toán tử là NaN, trả về NaN.
- Nếu một phép toán là undefined, sẽ xảy ra lỗi.
Giống như phép toán logic AND trong Java, phép toán logic AND trong ECMAScript cũng là phép toán đơn giản, tức là nếu toán tử đầu tiên quyết định kết quả, thì sẽ không tính toán toán tử thứ hai. Đối với phép toán logic AND, nếu toán tử đầu tiên là false, thì bất kể giá trị của toán tử thứ hai là gì, kết quả không thể bằng true.
Hãy xem ví dụ sau:
var bTrue = true; var bResult = (bTrue && bUnknown); //Xảy ra lỗi alert(bResult); //Dòng này sẽ không được thực thi
Đoạn mã này sẽ gây ra lỗi khi thực hiện phép toán logic AND vì biến bUnknown là undefined. Giá trị của biến bTrue là true vì phép toán logic AND sẽ tiếp tục tính toán biến bUnknown. Làm như vậy sẽ gây ra lỗi vì giá trị của bUnknown là undefined, không thể sử dụng trong phép toán logic AND.
Nếu bạn thay đổi ví dụ này, đặt số đầu tiên là false, thì sẽ không xảy ra lỗi:
var bFalse = false; var bResult = (bFalse && bUnknown); alert(bResult); //Xuất ra "false"
Trong đoạn mã này, vmlinh sẽ xuất ra giá trị của phép toán logic AND, tức là chuỗi "false". Dù giá trị của biến bUnknown là undefined, nó cũng sẽ không được tính toán vì giá trị của toán tử đầu tiên là false.
Lưu ý:Khi sử dụng toán tử AND logic, cần nhớ đặc điểm tính toán đơn giản này.
Toán tử OR logic
Toán tử OR logic trong ECMAScript tương tự như trong Java, đều được biểu thị bằng dấu hai chấm ngược (||):
var bTrue = true; var bFalse = false; var bResult = bTrue || bFalse;
Bảng giá trị thực của toán tử OR logic mô tả hành vi của toán tử này:
Phép toán số 1 | Phép toán số 2 | Kết quả |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
Giống như toán tử AND logic, nếu một phép toán không phải là giá trị Boolean, toán tử OR logic không nhất thiết trả về giá trị Boolean:
- Nếu một phép toán là đối tượng và tất cả các giá trị phép toán bên trái của đối tượng đều là false, thì trả về đối tượng đó.
- Nếu cả hai phép toán đều là đối tượng, thì trả về đối tượng đầu tiên.
- Nếu phép toán cuối cùng là null và tất cả các giá trị phép toán khác đều là false, thì trả về null.
- Nếu phép toán cuối cùng là NaN và tất cả các giá trị phép toán khác đều là false, thì trả về NaN.
- Nếu một phép toán là undefined, sẽ xảy ra lỗi.
Giống như toán tử AND logic, toán tử OR logic cũng là toán tử đơn giản. Đối với toán tử OR logic, nếu giá trị đầu tiên của phép toán là true, sẽ không tính toán giá trị phép toán thứ hai.
Ví dụ:
var bTrue = true; var bResult = (bTrue || bUnknown); alert(bResult); // xuất ra "true"
Giống như ví dụ trước, biến bUnknown là chưa được định nghĩa. Tuy nhiên, do giá trị của biến bTrue là true, bUnknown sẽ không được tính toán, vì vậy kết quả là "true".
Nếu thay đổi bTrue thành false, sẽ xảy ra lỗi:
var bFalse = false; var bResult = (bFalse || bUnknown); // xảy ra lỗi alert(bResult); // sẽ không thực thi dòng này
- Trang trước toán tử bit
- Trang tiếp theo toán tử nhân