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

Javascript (a==b&;b==c)的较短形式,javascript,Javascript,我想比较三个变量是否相等。当然,这是不起作用的: (a === b === c) // beware: true on (true === false === false) 所以我用 (a === b && b === c) 但我想知道是否有一种较短的形式(如第一种-但有效),其中每个变量只计算一次 编辑: 我的用例是以下表达式: (typeof a === typeof b && typeof b === typeof c) 我想避免这样做 对b的类型进

我想比较三个变量是否相等。当然,这是不起作用的:

(a === b === c) // beware: true on (true === false === false)
所以我用

(a === b && b === c)
但我想知道是否有一种较短的形式(如第一种-但有效),其中每个变量只计算一次

编辑:

我的用例是以下表达式:

(typeof a === typeof b && typeof b === typeof c)
我想避免这样做

  • 对b的类型进行两次评估
  • typeof b
    放入变量中

  • 不,对不起,没有。但是,如果您确实想这样做,可以创建一个帮助器函数:

    function Test3(a,b,c) { return a === b && b === c; }
    
    这将缩短键入时间,但也有缺点:

    • 它更为间接,因此代码更难阅读
    • 它可能会慢一些,因为需要进行函数查找和调用。然而,现代JS引擎可能有否定这一点的优化。如果此操作的性能至关重要,则需要更好的基准来确保
    • 虽然每个表达式只计算一次,但它们都将始终进行计算
    要解决所有这些缺点,我们可以这样写:

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

    但是,这相当冗长,并且包含一个临时变量(这是不可避免的,因为您需要比较
    表达式b
    两次,但只计算一次)。

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

    function equal(){
      var length = arguments.length,
          first = arguments[0];
    
      for(var i = 1;i<length;i++){
        if (arguments[i] !== first){
          return false;
        }
      }
    
      return true;
    }
    
    函数相等(){
    var length=arguments.length,
    第一个=参数[0];
    
    1;IIO可以使用(A&&&&c)<代码> A==B&&=,=C</CUD> 4个字符。@如果代码< >代码> A >代码> 1 ,<代码> B<代码> > <代码> >代码> C >代码> <代码> 882 <代码>。它们不相同。在C/C++中,我们做一些类似于<代码>的((d=a)=b & &d=c)对于(var i=
    如果对
    a
    b
    c
    的求值非常昂贵,而复制则不是。从形式上来说,这是定义的,因为
    &
    是按顺序排列的。这可能会转换为javascript,但这不是我的领域。我知道一个表达式被求值两次会冒犯优雅的感觉,但有时会这样,这是一个解决方案一开始看起来不那么优雅,但经过深思熟虑后,事实证明这是最好的方法。它也比较慢,因为它需要函数调用。@H2Ooooo-是的,这是真的。@H2Ooooo你确定它比较慢吗?javascript引擎可以内联函数调用。@nos-嗯,我没有跟上JS引擎世界中最新的优化,所以可能吧它可以得到很好的编译/内联/任何东西。不过,如果速度很重要,那么更好的基准测试@nos.函数调用速度会降低约10%(每秒约5.1亿次操作,每秒约5.8亿次操作)。