Kiểu boolean

Kiểu cơ sở boolean gồm hai giá trị truefalse.

> typeof false
'boolean'
> typeof true
'boolean'

Chuyển đổi tới boolean

Có 3 cách để chuyển đổi bất kỳ giá trị x nào tới kiểu boolean:

  • Sử dụng Boolean(x)
  • ? true: false
  • !!x

Bảng sau mô tả kết quả chuyển đổi:

xBoolean(x)
undefinedfalse
nullfalse
giá trị booleankhông thay đổi
giá trị số0 -> false, NaN-> false
các số khác -> true
giá trị chuỗi'' -> false
các chuỗi khác -> true
đối tượngtrue

Các giá trị falsy và truthy

  • Mọi giá trị chuyển thành true được gọi là truthy.
  • Mọi giá trị chuyển thành false được gọi là falsy.

Như vậy, trong JavaScript chỉ có các giá trị sau là falsy:

  • undefined, null
  • false
  • 0, NaN
  • '' (chuỗi trống)

Mọi giá trị khác (gồm tất cả các đối tượng) là truthy:


> Boolean('abc');
true
> Boolean([])
true
> Boolean({})
true

Toán tử điều kiện ( ? : )

Toán tử điều kiện có cú pháp như sau:

<<condition>> ? <<thenExpression>> : <<elseExpression>>

Nó chạy như sau:

  • Nếu condition truthy, chạy và trả về giá trị biểu thức thenExpression.
  • Nếu condition falsy, chạy và trả về biểu thức elseExpression.

Toán tử điều kiện còn được gọi là toán tử ba ngôi vì nó có ba toán hạng.

Các ví dụ:

> true ? 'yes' : 'no'
'yes'
> false ? 'yes' : 'no'
'no'
> '' ? 'yes' : 'no'
'no'

Các toán tử lôgic

Các toán tử lôgic &&|| trong JavaScript là bảo toàn giá trị (value-preserving) và chạy tắt (short-circuiting). Điều đó có nghĩa là gì?

Bảo toàn giá trị nghĩa là toán hạng được hiểu như giá trị boolean nhưng trả về giá trị gốc:

> 12 || 'hello'
12
> 0 || 'hello'
'hello'

Chạy tắt có nghĩa là nếu ngay từ toán hạng đầu tiên, kết quả đã được xác định rồi thì toán hạng thứ hai không được chạy.

Ví dụ, toán tử lôgic Và (&&) không chạy toán hạng thứ hai nếu toán hạng đầu tiên là falsy:

const x = false && console.log('hello');
// No in ra gì cả

Nếu toán hạng đầu tiên là truthy, toán hạng thứ hai được chạy:

const x = true && console.log('hello');
// In ra
// 'hello'

Toán tử lôgic (x && y)

Biểu thức a && b (đọc là a Và b) được chạy như sau:

  1. Chạy toán hạng a.
  2. Nếu kết quả là falsy, trả về giá trị này (lưu ý là giá trị gốc).
  3. Nếu không, chạy và trả về giá trị của toán hạng b.

Nói cách khác, hai biểu thức sau hoàn toàn tương đương:

a && b
!a ? a : b

Các ví dụ:

> false && true
false
> false && 'abc'
false

> true && false
false
> true && 'abc'
'abc'

> '' && 'abc'
''

Toán tử lôgic Hoặc (a || b)

Biểu thức a || b (đọc là a Hoặc b) chạy như sau:

  1. Chạy toán hạng a.
  2. Nếu kết quả là truthy, trả về kết quả này.
  3. Nếu không, chạy và trả về kết quả của toán hạng b.

Nói cách khác, hai biểu thức sau là tương đương:

a || b
a ? a : b

Các ví dụ:

> true || false
true
> true || 'abc'
true

> false || true
true
> false || 'abc'
'abc'

> 'abc' || 'def'
'abc'

Giá trị mặc định qua toán tử Hoặc

Đôi khi bạn nhận một giá trị và chỉ muốn sử dụng nó nếu nó không phải là null undefined. Nếu không, bạn muốn sử dụng một giá trị mặc định. Bạn có thể thực hiện điều này qua toán tử Hoặc ||:

const valueToUse = valueReceived || defaultValue;

Đây là một ví dụ sử dụng trong thực tế:

function countMatches(regex, str) {
  const matchResult = str.match(regex); // null hoặc Mảng
  return (matchResult || []).length;
}

Nếu chuỗi str phù hợp với biểu thức chính quy regex thì .match() trả về những phần phù hợp và đặt trong một mảng. Nếu không phù hợp nó trả về null (chứ không phải mảng trống). Chúng ta sửa lại qua toán tử ||.

Toán tử lôgic Không (!)

Biểu thức !x (đọc là Không x) chạy như sau:

  1. Chạy toán hạng x.
  2. Nếu kết quả là truthy thì trả về false.
  3. Nếu không trả về true.

Các ví dụ:

> !false
true
> !true
false

> !0
true
> !123
false

> !''
true
> !'abc'
false