2012-04-10 15 views
8

Olası Çoğalt:
What is the “double tilde” (~~) operator in JavaScript?JavaScript/node.js içinde ne yapıyorsunuz?

Ben node.js kütüphanenin kaynağında bu kod snip bulundu. ~~input değişkeninde ne gibi bir etkisi var?

inArray[3] = ~~input; 

Ayrıca diğer şekillerde kullanılıyor:

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

Kodun kafa karıştırıcı -_- okumasını sağlar. Son zamanlarda insanların bunu nasıl yaptığından nefret ediyorum; bu beni çok kızdırıyor. – Domenic

+1

Heh, bu çift çiftten bile daha can sıkıcıdır! .. .. –

+0

@jasonbar ~~ için arama yapamaz, ama ben baktım :(Nedense "double tilde" bana hiç olmadı! :) – Kato

cevap

13

~ operatörü işlenen bit çevirir. Bunu kullanarak iki kez bitleri çevirir, sonra tekrar döndürür, işlenene denk bir standart Javascript değeri döndürür, ancak tamsayı şeklinde. parseInt(myInt) için kestirme.

+0

Teşekkürler! Bu tür bir şey olacağını düşündüm. Bazı nedenlerden dolayı Google’ın nasıl olduğunu anlayamadım. Daha fazla çayın ihtiyacı olmalı :) – Kato

+0

Sorun değil, sorgunuzla ilgili yorumuma Google operatörlerine nasıl göz attığımı görün. : p –

+0

@Kato "tilde JavaScript" için google araması yapın ve I düğmesine şanslı olduğum için basın: http://dreaminginjavascript.wordpress.com/2008/07/04/28/ – andlrc

9

Math.floor'un yaptığı gibi bir değeri kırpmak hakir bir yoldur, bunun dışında negatif sayılar için farklı davranır. Örneğin, kesik -15.9 (~~-15.9) -15 verir, ancak döşeme her zaman en düşük sayıya doğru yuvarlanır, yani Math.floor(-15.9)16 verecektir.

Bunu yapmanın başka bir yolu da is to OR with zero.

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

re: Negatif değerler için farklı - nasıl olacak? – Kato

+0

@Kato, yayınlamak için açıklama ekledi. –

+0

Görünüşe göre ~~ Math.floor'dan biraz daha hızlıdır; Çoğu durumda önemli olan bu değil. – Kato

İlgili konular