2

どちらも同じ結果を出力し、文字列を数値に変換しているようです。私が気づいていない違いはありますか?~~ 演算子に関するドキュメントが見つからないようです。

var hey = true
hey = +hey //hey = 1

var hey = true 
hey = ~~hey //hey = 1

var num = "1231"
num = ~~num //num = 1231

var num = "1231"
num = +num //num = 1231

私が見つけた違いが 1 つあります。それは、~~ は常に数値を出力しようとするのに対し、+ は単純に NaN を返す場合があるということです。

num = "omfg"
num = ~~num //num = 0

num = "omfg"
num = +num //num = NaN

num = {}
num = ~~num //num = 0

num = {}
num = +num //num = NaN

どんな明確化も素晴らしいでしょう:)

4

3 に答える 3

5

演算子は数値に対してのみ使用できるため、どちらも暗黙的にオペランドを数値に変換します。

違いは、~演算子がビット単位の演算子であるため、数値も 32 ビット整数に変換することです。(Numberただし、結果は倍精度浮動小数点数などの型になります。)

どちらも実際の操作の副作用を使用するため、値を数値に変換する説明的な方法ではありません。通常、parseIntまたはのような関数を使用parseFloatして、文字列を数値に変換します。

于 2013-02-04T19:14:00.583 に答える
2

はい、違いがあります。試してみてください~~"3.4"

と同じよう+に、~~可能な限り、次のものを数値に変換しますが、+それとは異なり、整数にします。

ビット単位の演算子は、JavaScript で常に数値を 32 ビット整数に減らします。そして、これは「そのオペランドのビットを反転します」(つまり、整数部分は二重実行によって変更されません)。

MDNから:

すべてのビット演算子のオペランドは、ビッグ エンディアン順の 2 の補数形式の符号付き 32 ビット整数に変換されます。

于 2013-02-04T19:11:59.260 に答える
2

+num文字列を数値に変換しますが、10 進数を整数に変換しません。数字だけでなく文字も含む文字列の場合、NaNが返されます。

~~num文字列を数値に変換し、小数を切り捨てます (丸めは行いません)。数字だけでなく文字も含む文字列の場合、0が返されます。

于 2013-02-04T19:13:38.267 に答える