Boolean
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Giá trị Boolean có thể là một trong hai giá trị: true hoặc false, biểu diễn giá trị chân lý của một mệnh đề logic.
Mô tả
Giá trị Boolean thường được tạo ra bởi toán tử quan hệ, toán tử bằng nhau, và logical NOT (!). Chúng cũng có thể được tạo ra bởi các hàm biểu diễn điều kiện, chẳng hạn như Array.isArray(). Lưu ý rằng toán tử logic nhị phân như && và || trả về giá trị của các toán hạng, có thể là hoặc không là giá trị boolean.
Giá trị Boolean thường được sử dụng trong kiểm tra điều kiện, chẳng hạn như điều kiện cho câu lệnh if...else và while, toán tử điều kiện (? :), hoặc giá trị trả về predicate của Array.prototype.filter().
Bạn hiếm khi cần chuyển đổi rõ ràng một thứ gì đó sang giá trị boolean, vì JavaScript tự động thực hiện điều này trong ngữ cảnh boolean, vì vậy bạn có thể sử dụng bất kỳ giá trị nào như thể nó là boolean, dựa trên tính truthy của nó. Bạn cũng được khuyến khích sử dụng if (condition) và if (!condition) thay vì if (condition === true) hoặc if (condition === false) trong code của mình để tận dụng quy ước này. Tuy nhiên, đảm bảo rằng các giá trị biểu diễn điều kiện luôn là boolean có thể giúp làm rõ ý định của code.
// Do this:
// This always returns a boolean value
const isObject = (obj) => !!obj && typeof obj === "object";
// Or this:
const isObject = (obj) => Boolean(obj) && typeof obj === "object";
// Or this:
const isObject = (obj) => obj !== null && typeof obj === "object";
// Instead of this:
// This may return falsy values that are not equal to false
const isObject = (obj) => obj && typeof obj === "object";
Boolean primitive và Boolean object
Để chuyển đổi giá trị không phải boolean sang boolean, hãy dùng Boolean như một hàm hoặc dùng toán tử double NOT. Không sử dụng constructor Boolean() với new.
const good = Boolean(expression);
const good2 = !!expression;
const bad = new Boolean(expression); // don't use this!
Lý do là vì tất cả các object, bao gồm cả Boolean object có giá trị bọc là false, đều là truthy và được đánh giá là true trong các vị trí như câu lệnh điều kiện. (Xem thêm phần boolean coercion bên dưới.)
if (new Boolean(true)) {
console.log("This log is printed.");
}
if (new Boolean(false)) {
console.log("This log is ALSO printed.");
}
const myFalse = new Boolean(false); // myFalse is a Boolean object (not the primitive value false)
const g = Boolean(myFalse); // g is true
const myString = new String("Hello"); // myString is a String object
const s = Boolean(myString); // s is true
Warning:
Bạn hiếm khi cần sử dụng Boolean như một constructor.
Boolean coercion
Nhiều thao tác tích hợp sẵn mong đợi boolean trước tiên sẽ ép kiểu đối số của chúng sang boolean. Thao tác có thể được tóm tắt như sau:
- Boolean được trả về nguyên vẹn.
undefinedchuyển thànhfalse.nullchuyển thànhfalse.0,-0, vàNaNchuyển thànhfalse; các số khác chuyển thànhtrue.0nchuyển thànhfalse; các BigInt khác chuyển thànhtrue.- String rỗng
""chuyển thànhfalse; các string khác chuyển thànhtrue. - Symbol chuyển thành
true. - Tất cả các object đều trở thành
true.
Note:
Một hành vi kế thừa khiến document.all trả về false khi được sử dụng như boolean, mặc dù nó là một object. Thuộc tính này là kế thừa và không chuẩn và không nên được sử dụng.
Note: Không giống như các chuyển đổi kiểu khác như string coercion hoặc number coercion, boolean coercion không cố gắng chuyển đổi object sang primitive bằng cách gọi các phương thức người dùng.
Nói cách khác, chỉ có một số ít giá trị được ép kiểu thành false — chúng được gọi là các giá trị falsy. Tất cả các giá trị khác được gọi là các giá trị truthy. Tính truthy của một giá trị quan trọng khi được sử dụng với toán tử logic, câu lệnh điều kiện, hoặc bất kỳ ngữ cảnh boolean nào.
Có hai cách để đạt được hiệu ứng tương tự trong JavaScript.
- Double NOT:
!!xphủ địnhxhai lần, chuyển đổixsang boolean bằng cùng thuật toán như trên. - Hàm
Boolean():Boolean(x)sử dụng cùng thuật toán như trên để chuyển đổix.
Lưu ý rằng tính truthy không giống với việc bằng nhau theo nghĩa lỏng lẻo với true hoặc false.
if ([]) {
console.log("[] is truthy");
}
if ([] == false) {
console.log("[] == false");
}
// [] is truthy
// [] == false
[] là truthy, nhưng nó cũng bằng lỏng lẻo với false. Nó là truthy vì tất cả các object đều truthy. Tuy nhiên, khi so sánh với false, vốn là một primitive, [] cũng được chuyển đổi sang primitive, là "" thông qua Array.prototype.toString(). Việc so sánh string và boolean dẫn đến cả hai đều được chuyển đổi sang number, và chúng đều trở thành 0, do đó [] == false là true. Nhìn chung, tính falsy và == false khác nhau trong các trường hợp sau:
NaN,undefined, vànulllà falsy nhưng không bằng lỏng lẻo vớifalse."0"(và các string literal khác không phải""nhưng được ép kiểu về 0) là truthy nhưng bằng lỏng lẻo vớifalse.- Các object luôn truthy, nhưng biểu diễn primitive của chúng có thể bằng lỏng lẻo với
false.
Các giá trị truthy thậm chí ít có khả năng bằng lỏng lẻo với true hơn. Tất cả các giá trị đều là truthy hoặc falsy, nhưng hầu hết các giá trị không bằng lỏng lẻo với true hay false.
Constructor
Boolean()-
Tạo các
Booleanobject. Khi được gọi như một hàm, nó trả về giá trị primitive kiểu Boolean.
Thuộc tính instance
Các thuộc tính này được định nghĩa trên Boolean.prototype và được chia sẻ bởi tất cả các instance của Boolean.
Boolean.prototype.constructor-
Hàm constructor đã tạo ra instance object. Đối với các instance
Boolean, giá trị ban đầu là constructorBoolean.
Phương thức instance
Boolean.prototype.toString()-
Trả về string
truehoặcfalsetùy thuộc vào giá trị của object. Ghi đè phương thứcObject.prototype.toString(). Boolean.prototype.valueOf()-
Trả về giá trị primitive của object
Boolean. Ghi đè phương thứcObject.prototype.valueOf().
Ví dụ
>Tạo các giá trị false
const bNoParam = Boolean();
const bZero = Boolean(0);
const bNull = Boolean(null);
const bEmptyString = Boolean("");
const bfalse = Boolean(false);
Tạo các giá trị true
const btrue = Boolean(true);
const btrueString = Boolean("true");
const bfalseString = Boolean("false");
const bSuLin = Boolean("Su Lin");
const bArrayProto = Boolean([]);
const bObjProto = Boolean({});
Đặc tả
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-boolean-objects> |
Khả năng tương thích với trình duyệt
Xem thêm
- Boolean
- Boolean primitive
- Kiểu dữ liệu Boolean trên Wikipedia