(a == b&& b == c)的缩写形式

时间:2014-10-17 08:57:59

标签: javascript

我想比较三个变量是完全相同的。当然这是无法正常工作

(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放入变量

2 个答案:

答案 0 :(得分:1)

不,对不起,没有。如果你真的想要,你可以做一个辅助功能:

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

键入的时间会更短,但也有缺点:

  • 它更加间接,因此代码更难阅读。
  • 它可能会更慢,因为函数查找和调用是必要的。然而,现代JS引擎可能具有否定这一点的优化。如果这项操作的执行是最重要的,那么确保更好的基准。
  • 虽然每个表达式只会被评估一次,但它们都会被评估。

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

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

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

答案 1 :(得分:1)

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

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)