4

Mozilla ウェブサイトのドキュメンテーション ページで、オペレーターfilterを見ました:>>>

var t = Object(this),
     len = t.length >>> 0, //here
     res, thisp, i, val;
if (typeof fun !== 'function') {
    throw new TypeError();
}

ここで完全なドキュメントを見つけることができます: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

この演算子とは何ですか?

4

3 に答える 3

3

ビットシフト演算子です。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operatorsから、

a >>> bバイナリ表現の a を b ビット右にシフトし、シフトオフされたビットを破棄し、左からゼロをシフトインします。

とはいえ、値ゼロのビットを右にシフトしようとする人がいる理由は説明できません。1 を掛けるか、0 を追加することもできます。

于 2013-08-08T09:03:10.337 に答える
2

他の人が説明したように、それは「ゼロでのビット単位のシフト」演算子です。

>>正の値の場合、これは通常の演算子と同じ効果があります。負の値の場合、最上位ビットは「符号」ビットです。通常のシフトでは、符号ビットがシフトされます (負の値の場合は 1、正の場合は 0)。>>>符号ビットではなく常にゼロにシフトするため、異なる効果があります。

-2>>1 == -1
-2>>>1 == 2147483647

負の値を表す方法の詳細については、こちらを参照してください。

すべてのシフト演算子が行うことは、値を 32 ビット整数にキャストすることです (少なくとも私の Firefox はそうします)。したがって0、値が常に 32 ビット範囲内になるようにシフトします。を使用したビット単位のシフト0も、値が正であることを確認します。

a = Math.pow(2,32)       // overflow in 32-bit integer
a>>0 == 0
b = Math.pow(2,32) - 1   // max 32-bit integer: -1 when signed, 4294967295 when unsigned
b>>0 == -1
b>>>0 == 4294967295      // equal to Math.pow(2,32)-1
于 2013-08-08T09:09:39.773 に答える
0

ゼロ演算子を使用したビットごとの右シフトと呼ばれます。この演算子は、左側にシフトインされるビットが常にゼロであることを除いて、>> 演算子と同じです。

例: (A >>> 1) は 1 です。

http://www.tutorialspoint.com/javascript/javascript_operators.htm

更新: これはビットごとのシフト演算子が何をするかを説明します: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_shift_operators

于 2013-08-08T09:00:47.940 に答える