Toán tử Nullish Coalescing trong Javascript

notion image
Nullish Coalescing là một toán tử khá thú vị trong Javascript / Typescript.
Toán tử này được viết dưới dạng: ?? Nó được sử dụng với các biến mang giá trị null hoặc undefined (các biến chưa được xác định). Giá trị trả về của a ?? b là:
  • a nếu a xác định.
  • b nếu a không xác định.
Giả sử chúng ta có biến user và chúng ta muốn log xem user đã đăng nhập hay chưa, đầu tiên ta có thể sử dụng if / else như sau:
let user
if (user) {
    console.log(user)
} else {
    console.log('User not found')
}

// Output: User not found
Ngắn gọn hơn với toán tử 3 ngôi:
let user
console.log(user ? user : 'User not found')

// Output: User not found
Với Nullish Coalescing:
let user
console.log(user ?? 'User not found')

// Output: User not found
Tới đây chúng ta thấy Nullish Coalescing khá giống với toán tử || mà có lẽ ta đã từng gặp trước đó.
Sự khác biệt chính của 2 toán tử này là:
  • ?? đánh giá defined value.
  • || đánh giá truthy value.
Truthy value là những giá trị trong Javascript mà khi ép kiểu về Boolean thì sẽ cho ra giá trị là true, vì vậy những giá trị như false0nullundefined'' sẽ đều cho ra kết quả như nhau - falsy value. Chẳng hạn:
const message = ''
console.log(message || 'Hello World!')
// Hello World!console.log(message ?? 'Hello World!')
// ''
Một điều cần lưu ý nữa đó là nếu sử dụng ?? với && hay || mà không chỉ định thứ tự ưu tiên thì sẽ báo lỗi, ví dụ:
let subscribe = true && !false ?? false
// Error: '&&' and '??' operations cannot be mixed without parentheses.
Ta cần chỉ định thứ tự ưu tiên để loại bỏ lỗi này:
let subscribe = (true && !false) ?? false
console.log(subscribe)

// true