Trong JS, bạn có thể trả về một Boolean có các thuộc tính tùy chỉnh. Ví dụ. khi Modernizr kiểm tra video hỗ trợ, nó trả về true
hoặc false
Boolean được trả về (Bool là đối tượng lớp đầu tiên trong JS) có các thuộc tính chỉ định định dạng nào được hỗ trợ. Lúc đầu, nó làm tôi ngạc nhiên một chút nhưng sau đó tôi bắt đầu thích ý tưởng này và bắt đầu tự hỏi tại sao nó dường như được sử dụng khá ít?
Nó trông giống như một cách xử lý thanh lịch với tất cả các kịch bản mà về cơ bản bạn muốn biết liệu điều gì đó đúng hay sai nhưng bạn có thể quan tâm đến một số thông tin bổ sung mà bạn có thể xác định mà không cần xác định đối tượng trả lại tùy chỉnh hoặc sử dụng chức năng gọi lại được chuẩn bị chấp nhận nhiều thông số hơn. Bằng cách này, bạn giữ lại một chữ ký hàm rất phổ quát mà không ảnh hưởng đến khả năng trả về dữ liệu phức tạp hơn.
Có 3 đối số chống lại nó mà tôi có thể tưởng tượng:
- Có một chút không phổ biến / bất ngờ khi có thể tốt hơn cho mọi giao diện rõ ràng và không khó khăn.
- Đây có thể là một đối số người rơm, nhưng với một chút trường hợp cạnh, tôi có thể tưởng tượng nó lặng lẽ tác động trở lại trong một số trình tối ưu hóa JS, uglifier, VM hoặc sau khi thay đổi đặc tả ngôn ngữ dọn dẹp nhỏ, v.v.
- Có cách tốt hơn - ngắn gọn, rõ ràng và phổ biến - giống hệt nhau.
Vì vậy, câu hỏi của tôi là có bất kỳ lý do mạnh mẽ để tránh sử dụng Booleans với các thuộc tính bổ sung? Họ là một mẹo hay một điều trị?
Âm mưu xoắn xuýt.
Trên đây là câu hỏi ban đầu trong vinh quang đầy đủ. Như Matthew Crumley và senevoldsen đều chỉ ra rằng nó dựa trên một tiền đề sai (giả?). Trong truyền thống JS tốt, những gì Modernizr làm là một trò lừa ngôn ngữ và một thứ bẩn thỉu. Nó hiểu được rằng JS có một bool nguyên thủy, nếu được đặt thành false sẽ vẫn sai ngay cả sau khi TRYING để thêm đạo cụ (không thành công) và một đối tượng Boolean có thể có đạo cụ tùy chỉnh nhưng là một đối tượng luôn luôn đúng. Modernizr trả về boolean false hoặc một đối tượng Boolean trung thực.
Câu hỏi ban đầu của tôi cho rằng thủ thuật hoạt động khác nhau và vì vậy hầu hết các câu trả lời phổ biến đều xử lý khía cạnh tiêu chuẩn mã hóa (hoàn toàn hợp lệ). Tuy nhiên, tôi thấy các câu trả lời gỡ rối toàn bộ thủ thuật hữu ích nhất (và cũng là lý lẽ cuối cùng chống lại việc sử dụng phương pháp này) vì vậy tôi chấp nhận một trong số chúng. Cảm ơn tất cả những người tham gia!
null
nếu không được hỗ trợ và một loạt các định dạng nếu có. Một danh sách được coi là trung thực trong JS và null
là giả mạo.