PHPには、複数のオプションを単一の引数に受け入れることができる関数があることがわかりました。たとえば、次のようになります。
error_reporting(E_ERROR & E_WARNING);
この種の機能を JavaScript 関数に実装したいと考えています。この種の引数を取る関数の例を知っていますか?
渡されたオプションが何であるかを関数がどのように知っているかについて、私は完全に混乱しています...
PHPには、複数のオプションを単一の引数に受け入れることができる関数があることがわかりました。たとえば、次のようになります。
error_reporting(E_ERROR & E_WARNING);
この種の機能を JavaScript 関数に実装したいと考えています。この種の引数を取る関数の例を知っていますか?
渡されたオプションが何であるかを関数がどのように知っているかについて、私は完全に混乱しています...
(代わりに、 error_reporting(E_ERROR | E_WARNING); であると仮定します)
さて、ビットマスクです。したがって、E_ERROR は次のような数値 (バイナリ) になる可能性があります。
0010000
E_WARNING は次のようになります。
0000010
これらを | と組み合わせると、次のようになります。
0010010
(複数のビットが設定された単一の整数)
この関数は、 & ビット単位演算子を使用して、どのビットが設定されているかを確認できます。確かにJavaScriptでそれを行うことができますが、JavaScriptには実際には整数がなく、実際には浮動小数点数であるため、数値が大きくなるにつれてあまり一般的ではなく、効率と信頼性が低下する可能性があります。
JavaScript では、次のようなものを使用することをお勧めします。
error_reporting({warning: true, error: true});
(より賢明な方法で表示するように編集し、それらを結合するために | ではなく & を使用)
はい、可能ですが、 で動作し|
ます。
var flag1 = 1,
flag2 = 2; // powers of 2
function get(flags) {
if((flags & flag1) === flag1) { // remove all other bits and check
alert('flag1'); // whether you get the flag itself
}
if((flags & flag2) === flag2) {
alert('flag2');
}
}
get(flag1 | flag2); // alerts both
もちろん、これらの括弧が必要ないように、チェックを行うヘルパー関数を作成することもできます。
function contains(flags, flag) {
return (flags & flag) === flag;
}