Computer >> Máy Tính >  >> Lập trình >> Javascript

Nếu ([] ==false) là true, tại sao ([] || true) lại cho kết quả là []? - JavaScript

Nếu chúng ta xem xét kỹ câu lệnh vấn đề, sự khác biệt giữa ([] ==false) và ([] || true) là như sau -

Trong trường hợp đầu tiên, chúng tôi đang sử dụng kiểm tra có điều kiện lỏng lẻo, cho phép áp dụng cưỡng chế kiểu.

Trong trường hợp thứ hai, chúng tôi đang đánh giá [] thành Boolean tương ứng của nó (true hoặc falsy) sử dụng hàm Boolean () thay vì kiểu cưỡng chế dưới hook.

Bây giờ chúng ta hãy tiết lộ các chuyển đổi xảy ra ở hậu trường trong cả hai trường hợp.

Trường hợp 1 - ([] ==false)

Theo tài liệu MDN nếu hai kiểu dữ liệu cho biết x và y được so sánh bằng phép toán bình đẳng lỏng lẻo (==), thì

Giá trị boolean sẽ được chuyển đổi thành Số bằng cách sử dụng hàm Number () -

Vì vậy, điều kiện bây giờ trở thành -

[] == 0// Number(false) = 0

Sau đó, nếu biến kiểu Đối tượng sẽ được chuyển đổi thành giá trị nguyên thủy -

"" == 0

Và cuối cùng chuỗi trống sẽ được chuyển đổi thành Số -

0 == 0

Ở trên cuối cùng trả về true

Trường hợp 2 - ([] || đúng)

Trong trường hợp này, giá trị true / falsy của [] sẽ được kiểm tra bằng cách chuyển nó thành boolean bằng cách sử dụng hàm Boolean () có sẵn. Và,

Boolean([]) = true

Do đó, giá trị trung thực [] được giữ lại.