私はちょうどこのようなもののJSの省略形があるかどうか疑問に思っていました:
if (x != 1 && x != 2) do stuff;
そのような獣は存在しますか?代わりに、私はこのようなことを言いたいです:
if (x != 1:2) do stuff;
私はちょうどこのようなもののJSの省略形があるかどうか疑問に思っていました:
if (x != 1 && x != 2) do stuff;
そのような獣は存在しますか?代わりに、私はこのようなことを言いたいです:
if (x != 1:2) do stuff;
いいえ、そのような省略形はありません。
変数を繰り返したくない場合は、スイッチを使用できます。
switch (x) {
case 1:
case 2: break;
default: do stuff;
}
もう 1 つの方法は、配列内の値を探すことです。
if ([1, 2].indexOf(x) == -1) do stuff;
ただし、すべてのブラウザーに存在するわけではないため、たとえば Mozilla のドキュメント ページArray.indexOf
で見つけることができるフォールバックが必要になる場合があります。Array.indexOf
いいえ、それは存在しません。それは良いことです。正確性の低い自然言語でのみ、そのようなものが存在し、混乱を招く可能性があります。
x!=1 && x!=2はブラウザの省略形です。最初の部分が false の場合、ブラウザはすぐに終了します。両方の式を評価するラップできるコードは、ほぼ同じくらい効率的ではありません。
考えられる方法は2つあります。
ケース 1:
if ([1, 2].indexOf(x) < 0) // do stuff
ケース 2:
この方法はお勧めしません:
if (!(x in {1:0, 2:0})) // do stuff
段階的に:
{1:0, 2:0}
in
演算子を使用して、の値がx
オブジェクトのキーであるかどうかを確認します。!
不等式をチェックしたいので、結果の boolean using を否定します。代わりに、 CoffeeScriptを参照することをお勧めします。次のようなことを可能にするチェーン比較があります。
if (1 <= x <= 2) // do stuff
それはあなたの状態と同じではありませんが、面白いと思うかもしれません。
var a = 4;
if ([1,2,3,5,7,8,9,0,10,15,100].indexOf(a) == -1) console.log(a);
リストに 4 が存在しないため、4 をコンソールに記録します。
特定のオブジェクトにメソッドを追加する独自の関数を作成しても問題はありません。プロトタイプを拡張したり、名前空間を使用したりして、これを行うさまざまな方法があります。構文の例は次のとおりです。
if (!x.equals('1||2')) { /* do your stuff */ }
// the custom method '.equals' would extend a STRING, and return true or false
もう一つの例:
if (π.is(x,['1||2'])) { /* do your stuff */ }
// custom object "π" has a method "is" which checks whether x is 1 or 2, and returns true or false
これを行う方法はたくさんあります。非常に正当な理由で眉をひそめられるものもあり (たとえば、コア オブジェクト プロトタイプの拡張は、他のライブラリに影響を与え、人々をびっくりさせる可能性があるため、常に理想的とは限りません)、もちろん、オーバーエンジニアリングのリスクは常にあります。慎重に踏みます。
マイナーノート: 基になる関数が柔軟で、「&&」や「!」などの他の演算子を使用できるという考えで、論理演算子「||」を意図的に配置しました。等