Phụ thuộc vào các hoạt động bên trong jQuery, nhưng tôi muốn đi với
obj instanceof jQuery
Đó là nhất 'JavaScript cách' làm việc đó. Hãy nhớ rằng nó sẽ thất bại khi truyền các đối tượng giữa các ranh giới cửa sổ/khung!
gợi ý Tomalak của
'jquery' in obj
vẫn nên làm việc trong trường hợp này, vì vậy bạn nên sử dụng nó nếu bạn mong đợi để làm nhiều cửa sổ trao đổi dữ liệu. Tôi sẽ không khuyên bạn nên nó như một giải pháp chung, như chỉ tìm kiếm một tài sản có tên 'jquery'
không phải là rất đáng tin cậy.
Nhà điều hành in
cũng sẽ gặp lỗi nếu obj
là nguyên thủy. Nếu hành vi này là không mong muốn, bạn có thể xem xét sử dụng một trong các thử nghiệm này để thay thế:
obj && obj.jquery
'jquery' in Object(obj)
Tôi thấy thứ hai hấp dẫn hơn, nhưng cái thứ nhất có thể sẽ nhanh hơn.
Kiểm tra
Object(obj).hasOwnProperty('jquery')
sẽ thất bại, như jQuery đối tượng chỉ thừa hưởng tài sản từ nguyên mẫu của họ.
tôi cũng không khuyến khích sử dụng constructor
tài sản để kiểm tra kiểu trong JavaScript - nó có thể làm việc đáng tin cậy cho jQuery, nhưng như constructor
chỉ là một tài sản của đối tượng được trỏ đến bởi tài sản prototype
hàm xây dựng vào thời điểm instantiation, có rất nhiều cách để gây rối với xét nghiệm như vậy ...
như một mặt lưu ý:
jQuery tự kiểm tra cho obj && obj.jquery
. Nó không sử dụng instanceof
thậm chí một lần. Thay vào đó, nó sử dụng kết hợp của typeof
, nhập liệu vịt và toString.call()
để kiểm tra loại, điều này sẽ hoạt động ở nơi instanceof
sẽ không thành công.
Ngoài ra, hasOwnProperty()
cũng không bao giờ được sử dụng. Tôi không chắc điều này nói gì về chất lượng mã của thư viện jQuery;)
Nhiều chi tiết hơn bài đăng của tôi: +1 và tôi khuyên bạn nên chọn bài đăng của mình làm câu trả lời – VonC
Bạn đã bỏ phiếu vì đã đề cập đến sự thất bại của instanceof trên ranh giới cửa sổ/khung! –
Vậy cái nào là tốt nhất? – Kato