有条件的JS缩写"不等于a而不等于b"这样的?

时间:2012-12-14 02:53:22

标签: javascript syntax comparator conditional-statements shorthand-if

我只是想知道是否有一些像这样的JS简写:

  

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

这样的野兽存在吗?相反,我想说这样的话:

  

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

6 个答案:

答案 0 :(得分:5)

不,没有这样的速记。

如果您不想重复变量,可以使用开关:

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

另一种选择是在数组中查找值:

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

但是,Array.indexOf并非在所有浏览器中都存在,因此您可能需要一个后备,例如您可以在Mozilla Array.indexOf文档页面上找到。

答案 1 :(得分:2)

不,那不存在,那就好了!只有在不太精确的自然语言中存在这样的事物。这会导致混乱。

答案 2 :(得分:1)

我有两种方法可以想到。

案例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. 我们使用!否定结果布尔值,因为我们要检查不等式。
  4. 我建议你改为CoffeeScript。它有chained comparisons,可以让你做这样的事情:

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

    这与你的病情不一样,但你可能会发现它很有趣。

答案 3 :(得分:1)

var a = 4;
if ([1,2,3,5,7,8,9,0,10,15,100].indexOf(a) == -1) console.log(a);

将log 4记录到控制台,因为列表中没有4。

答案 4 :(得分:1)

x!= 1&amp;&amp; x!= 2 浏览器的简写 - 如果第一部分为false,则立即退出。没有代码可以将它包装起来,评估两个表达式几乎同样有效。

答案 5 :(得分: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

有很多方法可以做到这一点。有些人因为非常好的理由而感到不满(例如,扩展核心对象原型并不总是理想的,因为它可能会影响其他库并让人们失望),当然总是存在过度工程化的风险。小心翼翼。

次要注意:我故意将逻辑运算符“||”放在一边,认为底层函数可能是灵活的,并采用其他运算符,例如'&amp;&amp;'要么 '!'等。