「|」とは (シングルパイプ)JavaScriptで行うのですか?


147
console.log(0.5 | 0); // 0
console.log(-1 | 0);  // -1
console.log(1 | 0);   // 1

なぜ0.5 | 0ゼロを返すのに、整数(負を含む)が入力整数を返すのですか?単一パイプ( "|")は何をしますか?


12
これは、入力した事実を構文エラーが警告するのを防ぎます。||の代わりに
アンドリューマイヤーズ

回答:


157

これはビット単位のorです。
ビット演算0.5は整数に対してのみ意味があるため、切り捨てられます。

0 | xx、すべてのxです。


8
これは、浮動小数点数をintに変換する、または使用するための良い方法ですparseInt()
MaBi

4
@MaBi:ただし、値が32ビット整数に変換されるため、大きな数値では正しく機能しないことを知っておく必要があります。
Guffa

1
では、Floor関数と同じと見なすことができますか?
May13ank、2015

2
これはビット単位でのみ使用します。@Guffaが言ったように、大きな数は期待どおりに動作しません。例:248004937500 | 0 = -1103165668
Joseph Connolly

大きな数値は32ビット整数に変換されるため、オーバーフローします。
2018年

151

ビット比較はとてもシンプルなので、ほとんど理解できません;)この「ニブル」をチェックしてください

   8 4 2 1
   -------
   0 1 1 0 = 6  (4 + 2)
   1 0 1 0 = 10 (8 + 2)
   =======
   1 1 1 0 = 14 (8 + 4 + 2)

ビットごとのOR演算6と10は14を与えます:

   alert(6 | 10); // should show 14

ひどく混乱しています!


16
ブール値でも機能します。JSはtrueを1と解釈し、falseを0と解釈します。そうalert(true | false) //yields 1; alert(true | true) //yields 1; alert(false | true) //yields 1; alert(false | false) //yields 0
ゴードン14

21

単一のパイプはビットごとのORです。

ビットの各ペアに対してOR演算を実行します。aまたはbのいずれかが1の場合、a OR bは1を返します。

JavaScriptはビット単位の演算で整数以外の数値を切り捨てるため、0|00 として計算されます。


6
これは質問の答えにはなりません。(「なぜこれが0を返すのか」)
Kirk Woll

8

この例が役立ちます。

 
    var testPipe = function(input) { 
       console.log('input => ' + input);
       console.log('single pipe | => ' + (input | 'fallback'));
       console.log('double pipe || => ' + (input || 'fallback'));
       console.log('-------------------------');
    };

    testPipe();
    testPipe('something'); 
    testPipe(50);
    testPipe(0);
    testPipe(-1);
    testPipe(true);
    testPipe(false);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.