我只是想知道是否有这样的 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;
}
另一种选择是在数组中查找值:
if ([1, 2].indexOf(x) == -1) do stuff;
但是,Array.indexOf
并非所有浏览器都存在 ,因此您可能需要一个备用方案,例如可以在 MozillaArray.indexOf
文档页面上找到它。
不,那不存在,那很好!只有在不太精确的自然语言中才会存在这样的事情,这会导致混乱。
我能想到的方法有两种。
情况1:
if ([1, 2].indexOf(x) < 0) // do stuff
案例二:
我不推荐这种方式:
if (!(x in {1:0, 2:0})) // do stuff
逐步:
{1:0, 2:0}
in
运算符来检查值是否x
是对象的键。!
因为我们想检查不等式。我建议您改用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。
x!=1 && x!=2是浏览器的简写——如果第一部分为假,它会立即退出。没有任何代码可以包装它来评估这两个表达式几乎一样有效。
编写自己的函数向给定对象添加方法不会有任何问题。有多种方法可以做到这一点,通过扩展原型或使用命名空间。示例语法可能是:
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
有很多方法可以做到这一点。有些人不赞成有很好的理由(例如,扩展核心对象原型并不总是理想的,因为它可能会影响其他库并吓坏人们),当然总是存在过度设计的风险。小心行事。
小注:我故意放置逻辑运算符'||',因为底层函数可能是灵活的并采用其他运算符,例如'&&'或'!' 等等
您现在可以使用.includes
:
![1, 2].includes(x);