Chiến lược phổ biến nhất trong javascript là viết phòng thủ và kiểm tra kỹ lưỡng.
ví dụ: có thư viện mà bắt đầu từ một hình vuông với thử nghiệm tương tự như:
var element;
if (document && document.getElementById) {
element = document.getElementById('foo');
}
if (element) {
// use element
}
nhưng viết bằng một định dạng chung chung hơn với các xét nghiệm như isHostMethod.
Sử dụng thử..catch chỉ là phương sách cuối cùng để phát hiện tính năng hoặc phòng thủ khác không có sẵn. Việc kiểm tra đối tượng lưu trữ đôi khi trả về kết quả vô dụng hoặc thậm chí có thể ném lỗi (ví dụ: tất cả các tập lệnh XMLHttpRequest sử dụng try..catch vì thử nghiệm hỗ trợ trong IE là không thể kết luận để lựa chọn duy nhất là chỉ gọi nó và xem điều gì xảy ra).
Lỗi tập lệnh nhỏ không có nhiều vấn đề vì hầu hết các trình duyệt sẽ không hiển thị chúng theo mặc định. Hầu hết các trang không tầm thường đều bị lỗi tất cả thời gian (bao gồm SO) tùy thuộc vào những thứ như trình duyệt, cài đặt và môi trường mạng của người dùng. Người dùng chỉ bị từ chối chức năng mà họ có thể hoặc có thể không nhận thức được họ đang thiếu (và thực sự có thể hưởng lợi từ). Do đó, một chiến lược điển hình là làm cho chúng ta trang chức năng mà không cần bất kỳ tập lệnh nào, sau đó thêm các tính năng tập lệnh để nâng cao khả năng sử dụng. Bằng cách đó, luôn có một dự phòng cho chức năng cơ bản nếu xảy ra lỗi có thể ngăn trang hữu ích.
Chiến lược này có thể không phải lúc nào cũng có thể, nhưng đó là điểm khởi đầu tốt và không nên bỏ qua một cách nhẹ nhàng.
Giả sử bạn đã bao bọc mọi khối trong thử/nắm bắt: khối catch của bạn thực sự sẽ làm gì với các ngoại lệ? – nnnnnn
@nnnnnn sẽ không tránh gặp sự cố khi toàn bộ tập lệnh đủ hữu ích? Tôi thấy một số thử bắt khối trong mã jQuery UI 'với khối catch, vì vậy tôi giả định đó là một mục đích để gói tất cả các mã? –
Điểm của tôi là suy nghĩ về những gì sẽ xảy ra hoặc sẽ xảy ra sau khi ngoại lệ và chắc chắn mã theo đó. "Tránh làm rơi toàn bộ tập lệnh" không thực sự hữu ích nếu ngoại lệ xảy ra trong nửa đầu nhưng nửa thứ hai sẽ không hoạt động nếu không có kết quả hợp lệ từ nửa đầu. Và một số trường hợp ngoại lệ có thể hoàn toàn tránh được bằng cách mã hóa chính xác ngay từ đầu - tôi không nói bạn sẽ làm điều này, nhưng tôi đã thấy nhiều mã nơi tác giả viết mã tinh ranh và sau đó gói nó trong một lần thử chặn để tránh cho phép người dùng thấy các lỗi có thể tránh được. – nnnnnn