我想比较三个变量是否相等。当然这是行不通的:

(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,但只进行一次评估)。

关于javascript - (a == b && b == c)的缩写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26421433/

10-12 12:47