Menu

Giá trị truthy và falsy trong JavaScript: danh sách đầy đủ

Những gì được coi là truthy và falsy trong JavaScript, danh sách đầy đủ các giá trị falsy và cách chuyển đổi sang boolean diễn ra trong code thực tế.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Mọi giá trị đều mang một "tâm trạng" boolean

JavaScript cho phép bạn đặt bất kỳ giá trị nào vào chỗ cần một boolean: trong if, làm điều kiện của while, cạnh && hoặc ||. Khi đó, giá trị bị chuyển đổi thành true hoặc false. Những giá trị chuyển thành false được gọi là falsy. Mọi thứ còn lại là truthy.

Không cần hàm chuyển đổi, không cần ép kiểu tường minh: JavaScript tự làm việc đó. Các quy tắc cố định và ít ỏi, nên một khi đã biết danh sách falsy, mọi trường hợp khác đều suy ra được.

Danh sách falsy đầy đủ

Có đúng tám giá trị falsy. Mọi thứ khác trong ngôn ngữ đều là truthy.

Chỉ vậy thôi. Danh sách gồm:

  • false: chính giá trị boolean đó.
  • 0 và -0: cả hai số 0.
  • 0n: số 0 kiểu BigInt.
  • "": chuỗi rỗng (dùng nháy đơn, nháy kép hay backtick đều như nhau).
  • null: giá trị "cố ý không có gì".
  • undefined: giá trị "chưa được gán".
  • NaN: kết quả của phép toán không hợp lệ như 0 / 0.

Hãy thuộc lòng tám giá trị này. Sau đó, với bất kỳ giá trị nào bạn không chắc, chỉ cần hỏi: "nó có nằm trong tám giá trị đó không?" Nếu không, nó là truthy.

Những điều bất ngờ: "0", [] và {}

Đây là chỗ người mới hay vấp. Có rất nhiều giá trị trông như rỗng nhưng lại là truthy:

Chuỗi chỉ falsy khi không có ký tự nào. "0" có một ký tự, nên nó là truthy. Mảng và đối tượng luôn luôn là truthy, kể cả khi rỗng, vì JavaScript coi chúng là đối tượng, và mọi đối tượng đều truthy bất kể bên trong chứa gì.

Nếu bạn đến từ Python, đây là thay đổi tư duy lớn nhất. Trong Python, [] và {} là falsy. Trong JavaScript thì không.

Kiểm tra "rỗng" cho đúng cách

Vì [] và {} là truthy, bạn không thể dùng trực tiếp chúng trong if để kiểm tra rỗng. Hãy viết tường minh:

Với chuỗi cũng vậy, nếu bạn muốn coi chuỗi chỉ có khoảng trắng là rỗng:

Truthy/falsy là một cách viết tắt tiện lợi, chứ không thay thế được việc suy nghĩ "rỗng" nghĩa là gì với dữ liệu của bạn.

Chuyển sang một boolean thật sự

Đôi khi bạn cần một giá trị true hoặc false thật sự, chứ không chỉ một giá trị kiểu truthy. Có hai cách viết quen thuộc:

Boolean(x) là phép chuyển đổi tường minh. !!x là cách viết tắt của cùng việc đó: dấu ! đầu tiên chuyển sang boolean và lật nó, dấu ! thứ hai lật lại. Cả hai đều phổ biến. !! ngắn hơn; Boolean() dễ đọc hơn.

Bạn sẽ thường thấy !! trong câu lệnh return khi một hàm cần trả về một boolean gọn gàng:

Truthy/falsy với && và ||

Các toán tử logic không trả về true hay false: chúng trả về một trong các toán hạng. Toán hạng nào được trả về phụ thuộc vào tính truthy:

Đó là lý do value || defaultValue là mẫu rất phổ biến để đặt giá trị mặc định. Nhưng nó có một cái bẫy: nó đối xử với mọi giá trị falsy như nhau, kể cả 0 và "", vốn thường là đầu vào hợp lệ:

Nếu bạn chỉ muốn dùng giá trị dự phòng khi gặp null hoặc undefined, hãy dùng toán tử nullish coalescing ?? thay thế. Toán tử này được trình bày trong một bài riêng.

Bảng tra nhanh

In nó ra, dán lên màn hình, rồi cứ thế mà tiếp tục.

Tiếp theo: iterator và generator

Khi đã nắm vững câu lệnh điều kiện và vòng lặp, chương tiếp theo sẽ xem JavaScript cho phép các giá trị tự tạo ra theo yêu cầu như thế nào. Iterator và generator là bộ máy đứng sau for...of, toán tử spread và rất nhiều API hiện đại, và đó là nội dung tiếp theo.

Câu hỏi thường gặp

Các giá trị falsy trong JavaScript là gì?

Có đúng tám giá trị: false, 0, -0, 0n (số 0 kiểu BigInt), '' (chuỗi rỗng), null, undefined và NaN. Mọi thứ còn lại đều là truthy, kể cả '0', 'false', [] và {}. Thuộc lòng danh sách falsy ngắn này là bạn biết câu trả lời cho mọi giá trị khác bằng cách loại trừ.

Mảng rỗng trong JavaScript là truthy hay falsy?

Truthy. if ([]) { ... } vẫn chạy khối lệnh, điều khiến những ai đến từ Python hoặc PHP bất ngờ. Mảng và đối tượng đều là đối tượng, và mọi đối tượng đều là truthy bất kể bên trong có gì. Để kiểm tra mảng rỗng, hãy dùng tường minh arr.length === 0.

Làm sao chuyển một giá trị sang boolean trong JavaScript?

Có hai cách: Boolean(value) là dạng tường minh, còn !!value là cách viết tắt (phủ định hai lần: chuyển đổi rồi lật lại). Cả hai tuân theo cùng các quy tắc truthy/falsy. Hãy dùng chúng khi bạn cần một giá trị true/false thật sự, không chỉ một kết quả kiểu truthy.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu