(a==b&&b==c)的较短形式

Shorter form of (a == b && b == c)

本文关键字:amp      更新时间:2023-09-26

我想比较三个变量,使它们都相等。当然,这是不起作用

(a === b === c) // beware: true on (true === false === false)

所以我用了

(a === b && b === c)

但我想知道是否有一种较短的形式(像第一种,但有效),其中每个变量只计算一次

编辑:

我的用例是以下表达式:

(typeof a === typeof b && typeof b === typeof c)

我想避开

  • 评估typeof b两次
  • typeof b放入变量

不,对不起,没有。如果你真的想,你可以制作一个助手函数:

function Test3(a,b,c) { return a === b && b === c; }

这将是更短的打字,但也有缺点:

  • 它有点间接,所以代码会更难阅读
  • 它可能会更慢,因为函数查找和调用是必要的。然而,现代JS引擎可能具有否定这一点的优化。若这个操作的性能是最重要的,那个么要确保更好的基准
  • 尽管每个表达式只会被求值一次,但它们都将始终被求值

为了解决所有这些缺点,我们可以这样写:

var b = ExpressionB;
if ( ExpressionA === b && ExpressionC === b ) { ... }

然而,这是非常冗长的,并且包括一个临时变量(这无论如何都是不可避免的,因为您需要比较ExpressionB两次,但只计算一次)。

如果要比较任意数量的项,可以使用一个比较其所有参数的函数。。

function equal(){
  var length = arguments.length,
      first = arguments[0];
  for(var i = 1;i<length;i++){
    if (arguments[i] !== first){
      return false;
    }
  }
  return true;
}

并称之为equal(a,b,c)equal(a,b,c,d,e,f,g,h,i,j)

相关文章:
  • 没有找到相关文章