Nếu bạn đọc các bình luận tại inArray
trang jQuery ở đây , có một khai báo thú vị:
!!~jQuery.inArray(elm, arr)
Bây giờ, tôi tin rằng dấu chấm than kép sẽ chuyển đổi kết quả thành loại boolean
, với giá trị là true
. Điều tôi không hiểu là việc sử dụng ~
toán tử dấu ngã ( ) trong tất cả những điều này là gì?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Cấu trúc lại if
câu lệnh:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Phá vỡ:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
Tôi cũng nhận thấy rằng nếu tôi đặt dấu ngã ở phía trước, kết quả là -2
.
~!!~jQuery.inArray("one", arr) // -2
Tôi không hiểu mục đích của dấu ngã ở đây. Ai đó có thể vui lòng giải thích nó hoặc chỉ cho tôi về một nguồn tài nguyên?
~jQuery.inArray()
thực sự rất hữu ích - thậm chí có thể là một lý do rất tốt tại sao các hàm tìm kiếm trả về -1
lỗi (giá trị duy nhất có phần bù của hai là sai). Khi bạn đã xem và hiểu thủ thuật này, tôi cảm thấy nó thậm chí còn dễ đọc hơn != -1
.
!!~
cho bất cứ điều gì .
if (x != -1)
và if (~x)
đối với tôi, là cái trước thực sự thể hiện những gì bạn định làm. Phần sau thể hiện rằng bạn muốn làm điều gì đó hoàn toàn khác ("vui lòng chuyển đổi Số 64 bit của tôi thành số nguyên 32 bit và kiểm tra xem bitwise KHÔNG của số nguyên đó có phải là sự thật hay không"), nơi bạn chỉ tình cờ nhận được kết quả mong muốn trong điều này một trường hợp.