6

私はちょうどこのようなもののJSの省略形があるかどうか疑問に思っていました:

if (x != 1 && x != 2) do stuff;

そのような獣は存在しますか?代わりに、私はこのようなことを言いたいです:

if (x != 1:2) do stuff;

4

7 に答える 7

5

いいえ、そのような省略形はありません。

変数を繰り返したくない場合は、スイッチを使用できます。

switch (x) {
  case 1:
  case 2: break;
  default: do stuff;
}

もう 1 つの方法は、配列内の値を探すことです。

if ([1, 2].indexOf(x) == -1) do stuff;

ただし、すべてのブラウザーに存在するわけではないため、たとえば Mozilla のドキュメント ページArray.indexOfで見つけることができるフォールバックが必要になる場合があります。Array.indexOf

于 2012-12-14T03:05:08.087 に答える
2

いいえ、それは存在しません。それは良いことです。正確性の低い自然言語でのみ、そのようなものが存在し、混乱を招く可能性があります。

于 2012-12-14T03:02:53.807 に答える
1

x!=1 && x!=2ブラウザの省略形です。最初の部分が false の場合、ブラウザはすぐに終了します。両方の式を評価するラップできるコードは、ほぼ同じくらい効率的ではありません。

于 2012-12-14T05:54:46.587 に答える
1

考えられる方法は2つあります。

ケース 1:

if ([1, 2].indexOf(x) < 0) // do stuff

ケース 2:

この方法はお勧めしません:

if (!(x in {1:0, 2:0})) // do stuff

段階的に:

  1. 比較する数値をキーとしてオブジェクトを作成します。{1:0, 2:0}
  2. in演算子を使用して、の値がxオブジェクトのキーであるかどうかを確認します。
  3. !不等式をチェックしたいので、結果の boolean using を否定します。

代わりに、 CoffeeScriptを参照することをお勧めします。次のようなことを可能にするチェーン比較があります

if (1 <= x <= 2) // do stuff

それはあなたの状態と同じではありませんが、面白いと思うかもしれません。

于 2012-12-14T03:21:21.730 に答える
1
var a = 4;
if ([1,2,3,5,7,8,9,0,10,15,100].indexOf(a) == -1) console.log(a);

リストに 4 が存在しないため、4 をコンソールに記録します。

于 2012-12-14T03:23:56.930 に答える
0

特定のオブジェクトにメソッドを追加する独自の関数を作成しても問題はありません。プロトタイプを拡張したり、名前空間を使用したりして、これを行うさまざまな方法があります。構文の例は次のとおりです。

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

これを行う方法はたくさんあります。非常に正当な理由で眉をひそめられるものもあり (たとえば、コア オブジェクト プロトタイプの拡張は、他のライブラリに影響を与え、人々をびっくりさせる可能性があるため、常に理想的とは限りません)、もちろん、オーバーエンジニアリングのリスクは常にあります。慎重に踏みます。

マイナーノート: 基になる関数が柔軟で、「&&」や「!」などの他の演算子を使用できるという考えで、論理演算子「||」を意図的に配置しました。等

于 2012-12-14T03:20:40.917 に答える