2014-01-16 5 views
5

「〜〜」誰かがそれが何のために使用されているのか説明できますか?Javascriptで '〜〜'とは何ですか?

Google検索は完了しましたが、何も返されていません。

これは数学演算子ですが、数値に対して実際に何をしているのかわかりません。

+0

これが重複している場合は、私はq&aの何をすると思いますか? –

+0

重複している箇所がわからない以前の質問は表示されません。リンク? –

+0

http://stackoverflow.com/questions/4055633/what-does-do-in-javascript –

答えて

7

〜ビット単位の演算子です。

var a = 1.9;
Math.floor(a) === ~~a // true (1 === 1)

しかし1)読むthis answerは、それが達成されるかを理解するとthis performance testは、いくつかのものを見て:二回、それを使用することにより、一部の人々は、その代わりに、同じようMath.floorを使用しての最適化と言いますケースはMath.floor()が高速です。 Math.floor()がその目的であるため、後で性能が上がることは意味をなさない!

ただし、2)this answerを読んで、負の数といくつかのエッジケースで異なる効果を確認してください。

var a = -1.5;
Math.floor(a) !== ~~a // true (-2 !== -1)

しかし+)しかし
Math.floor(Infinity) !== ~~Infinity // true (Infinity !== 0)

は++)いくつかのより多くの興味深い側面があるだろう、私は確信している、同様のコメントを確認してください。

個人的には、パフォーマンスが確かなものでない場合には、私は読みやすさを好みます。プラス他の効果...ちょうどMath.floorを使用して最高のためだ!

ビット単位の演算子はmozzila ref、JavaScriptでの数字の表現方法はw3schoolsです。

+1

JavaScriptビット単位の演算子としては、 'Math.floor()'と全く同じではありません。 32ビット値で作業します。 'Math.floor'は64ビットの浮動小数点値を扱うことができます。 – Pointy

+1

また、 '~~" a "'は0を返しますが、 'Math.floor(" a ")'はNaNです。 – OnlyThenDidIReckonMyCurse

3

ビットの補数演算子のペアです。これは一人のオペレータではありません。

これは時には32ビットの整数に数値を強制するために使用されます:

var anInteger = ~ ~ aValue; 
関連する問題