2012-04-10 18 views
8

thể trùng lặp:
What is the “double tilde” (~~) operator in JavaScript?~~ làm gì trong JavaScript/node.js?

tôi thấy snip mã này trong mã nguồn thư viện Node.js của. Hiệu ứng ~~ nào có trên biến số input?

inArray[3] = ~~input; 

Nó cũng được sử dụng theo những cách khác:

return ~~ ((a - b)/864e5/7 + 1.5); 
+9

Làm cho mã khó hiểu khi đọc -_-. Tôi ghét cách mọi người làm điều này gần đây; nó làm tôi rất tức giận. – Domenic

+1

Heh, điều này thậm chí còn khó chịu hơn gấp đôi '!!' .. –

+0

@jasonbar không thể tìm kiếm ~~, nhưng tôi đã nhìn :(Vì một lý do nào đó "dấu ngã kép" không bao giờ xảy ra với tôi! :) – Kato

Trả lời

13

Toán tử ~ sẽ lật các bit của toán hạng. Sử dụng nó hai lần lật các bit, sau đó flips chúng một lần nữa, trả về một giá trị Javascript tiêu chuẩn tương đương với toán hạng, nhưng ở dạng nguyên. Đó là viết tắt của parseInt(myInt).

+0

Cảm ơn! Tôi nghĩ nó sẽ là thứ gì đó. Vì một lý do nào đó, tôi không thể tìm ra cách Google làm thế nào; phải cần thêm trà :) – Kato

+0

Không sao, hãy xem nhận xét của tôi về câu hỏi của bạn về cách thức hoạt động của Google. : p –

+0

@Kato Tìm kiếm google cho "JavaScript dấu ngã" và nhấn Tôi Cảm thấy may mắn: http://dreaminginjavascript.wordpress.com/2008/07/04/28/ – andlrc

1

Nó chuyển đổi các giá trị cho một số nguyên.

9

Đó là một cách hackish để cắt bớt một giá trị, một chút giống như những gì Math.floor làm, ngoại trừ điều này hoạt động khác nhau cho số âm. Ví dụ, cắt ngắn -15.9 (~~-15.9) cho -15, nhưng sàn nó sẽ luôn luôn tròn về phía số thấp nhất, vì vậy Math.floor(-15.9) sẽ cung cấp cho 16.

Một cách khác để làm điều đó is to OR with zero.

var a = 15.9 | 0; //a = 15 
+0

lại: Khác với các giá trị âm - như thế nào? – Kato

+0

@Kato đã thêm giải thích cho bài đăng. –

+0

Có vẻ như ~~ khá nhanh hơn Math.floor một chút; không phải là nó đủ quan trọng trong hầu hết các trường hợp. – Kato