JavaScript简写法

5

以下是否有简写版本:

(a > 0 && a < 1000 && b > 0 && b < 1000 && c > 0 && c < 1000)

非常感谢。

许多感谢。


这里的所有解决方案都比制作那个大if语句要慢。 - epascarello
6个回答

7
没有简写的缩写。没有一种简单的内联方式来指定这样一个比较,以便可以针对不同的变量重复使用。
您可以编写用于验证值的函数:
function between(min, max, values) {
  for (var i = 2; i < arguments.length; i++) {
    if (arguments[i] < min || arguments[i] > max) return false;
  }
  return true;
}

然后使用以下方式调用:

between(1, 999, a, b, c)

@Guffa:有逗号丢失吗?min max - thejh
+1,还可以将其制作成高阶函数工厂。并添加逗号。 - BGerrissen
1
@Guffa:在函数定义中需要“values”参数吗? - Mahesh Velaga
@Mahesh - 不用了,你可以不加。 - Nick Craver
@Mahesh Velaga:这只是为了提示还有更多的参数需要输入,你可以省略它,或者写成注释形式:function between(min, max /*,values... */) { - Guffa

2

有很多方法可以做到这一点。个人认为,如果我要经常这样做,我会定义一个函数:

function between(val, min, max) { return min < val && val < max; }

然后你的 if 检查看起来像这样:
if(between(a, 0, 1000) && between(b, 0, 1000) && between(c, 0, 1000))

另一种方法是在数字本身上添加一个方法:

Number.prototype.between = function(min,max) { return min<this && this<max; };

然后像这样使用它:
if(a.between(0, 1000) && b.between(0, 1000) && c.between(0, 1000))

虽然这样做会更加简洁,但你也可以选择另一种方法。


注意:这两种方法都是为了方便而设计的。它们运行速度较慢,但维护起来会更加容易...尽管使用闭包编译器和高级优化,其中大部分代码都会被内联。


如果你停止在逗号应该放句号的地方使用逗号,我保证我会买你的jQuery书 ;) - sje397
@BGerrissen - 如果你的范围检查始终为0和1000,那么它将变得更加缓慢...上面是一个一般性的例子 :) - Nick Craver
@sje397 - 我有一本书?你确定吗?这对我来说是个新闻。 :) - Nick Craver
@Nick Craver:我认为你基本上教会了我jQuery。我应该加上“当它发布时”。 - sje397
@sje397 - 我只是在挑逗你内心的逗号恶魔,已经更新 :) - Nick Craver

1
Number.prototype.isInRange = function(low, high) {
   return this > low && this < high;
}

现在试试这个:

(a.isInRange(0,1000) && b.isInRange(0,1000) && c.isInRange(0,1000))

如果你愿意,你可以将函数重命名为你喜欢的名称,以节省更多的按键。不过我会选择可读性 :)


那实际上更长,只是不那么重复。:o) - deceze
这样是行不通的,你只是定义了一个函数,并没有针对任何东西...它需要在你调用的原型上。 - Nick Craver

1
如果不存在 a,b,c 为负数的情况,你可以这样做:
(a && b && c && a < 1000 && b < 1000 && c < 1000)

或者如果你只是想稍微整理一下,你可以添加换行符,如果你不反对这种做法的话。

(a > 0 && a < 1000 && 
 b > 0 && b < 1000 && 
 c > 0 && c < 1000)

不会更短,但读起来更容易。


0

如果你担心比较的次数,那么没有捷径。如果你想减少比较中的字符数,你可以编写一个“在零和2000之间”的函数并调用它三次。


-1

你可以使用一个 & :

(a > 0 & a < 1000 & b > 0 & b < 1000 & c > 0 & c < 1000)

我脑海中没有其他想法


2
这是一个可怕的想法,而且也没有什么帮助。 - user395760
2
& 和 && 不同 - 尽管在大多数情况下它们的作用相同,但 & 是按位与运算符,而 && 是布尔与运算符。即使在它们的作用相同的情况下,按位运算符也会有更多的开销,因为它需要在布尔和二进制比较之间进行切换。 - Macros
-1 这种情况只有在你真正需要进行按位运算时才应该这样做。 - BGerrissen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接