我只是想知道是否有一些像这样的JS简写:
if (x != 1 && x != 2) do stuff;
这样的野兽存在吗?相反,我想说这样的话:
if (x != 1:2) do stuff;
答案 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:0, 2:0}
in
运算符来检查x
的值是否是对象的键。!
否定结果布尔值,因为我们要检查不等式。我建议你改为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;'要么 '!'等。