Khác nhau giữa toán tử nullish coalescing (??) và logical OR (||) trong JS

Tram Ho

Khi học JS mình chắc chắn các bạn sẽ có câu hỏi làm thế nào để gán giá trị default nếu như giá trị mong muốn bị null hoặc undefined. Cách đây vài năm, tìm hiểu thì hẳn các bạn sẽ thấy người ta dùng toán tử logical OR (||) để làm điều đó, hoặc chuối hơn là dùng if/else phải không nào. Ví dụ dùng logical OR (||):

Hoặc cách cực kỳ chuối, check if/else

Còn ở thời nay, xịn xò hơn bạn đã có toán tử nullish coalescing (??). Ví dụ:

Vậy câu hỏi đặt ra, cả hai toán tử ||?? như nhau vậy cần gì JS hỗ trợ thêm cái ?? làm chi.

Định nghĩa ??

Theo như MDN docs viết: “The nullish coalescing operator (??) is a logical operator that returns its right-hand side operand when its left-hand side operand is null or undefined, and otherwise returns its left-hand side operand.”

Nghĩa là toán tử sẽ trả về giá trị phía bên phải nếu giá trị phía bên trái là null hoặc undefined, ngược lại sẽ trả về phía bên trái.

Khác biệt ?? và ||

Về cơ bản ??|| mục đích như nhau, nhưng với || sẽ “thêm thắt” đôi chút.

Toán tử || sẽ trả về giá trị phía bên phải nếu giá trị phía bên trái là falsy, không chỉ có null/undefined như ??.

Về falsy chỉ cần nhớ, có 8 giá trị mà khi biên dịch JS sẽ cho đó là false:

  • false
  • undefined
  • null
  • NaN
  • 0
  • -0
  • 0n
  • ” (empty string)

Vì vậy khi dùng toán tử || nó sẽ trả về giá trị bên phải trong trường hợp vế trái rơi vào 8 trường hợp trên (toán tử ?? chỉ có 2 trường hợp). Ví dụ:

Vì vậy JS hỗ trợ toán tử mới ?? để tránh những case này, làm cho code work theo ý muốn hơn.

Bonus

Bạn có thể sử dụng kết hợp toán tử optional chaining (?.) và nullish coalescing (??) cùng nhau. Ví dụ

Như vậy sẽ trông pro hơn hẳn.

Tóm lại

Thực ra nếu bạn là C# developer bạn sẽ thấy ôi, C# cũng có ?? vậy không lẽ mấy bác Microsoft mượn idea? Không đâu, thực ra ngược lại mới đúng, JS mượn idea ?? từ C# đó.

Tóm lại:

  • ?? chỉ check 2 trường hợp duy nhất nullundefined
  • Còn || sẽ check falsy (8 trường hợp)
  • Sử dụng ?? sẽ tránh check nhiều điều kiện không mong đợi, tránh lỗi trên trời rơi xuống, recommend hơn.
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo