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;
}

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

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

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

于 2012-12-14T03:05:08.087 回答
2

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

于 2012-12-14T03:02:53.807 回答
1

我能想到的方法有两种。

情况1:

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

案例二:

我不推荐这种方式:

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

逐步:

  1. 我们创建一个对象,其中的数字作为键进行比较:{1:0, 2:0}
  2. 我们使用in运算符来检查值是否x是对象的键。
  3. 我们使用否定结果布尔值,!因为我们想检查不等式。

我建议您改用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 回答
1

x!=1 && x!=2浏览器的简写——如果第一部分为假,它会立即退出。没有任何代码可以包装它来评估这两个表达式几乎一样有效。

于 2012-12-14T05:54:46.587 回答
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 回答
0

您现在可以使用.includes

![1, 2].includes(x);
于 2021-08-26T11:35:16.983 回答