1

根据这个链接,我们知道

console.log(false ** false == true);  // true
console.log(false ** true == false);  // true
console.log(true ** false == true);  // true
console.log(true ** true == true);  // true

我认为我们可以通过在 ES7中实现Converse 蕴涵。exponentiation operator

给定函数的返回值f()g()boolean。所以我们可以使用这个简单的代码

if (g() ** f()) { 
   // 
}

取代

if ((g() && f()) || !f()) {
    //
}

一些测试代码在这里。它在 ES7 下是否有效?

4

2 回答 2

2

该声明:

if ((g() && f()) || !f()) {

由于短路机制,有几个潜在的不良影响:

  1. ifg()为假,f()计算一次,取反的结果用于分支。
  2. 如果g()是真的,并且第一个 f()也是真的,if则评估块的内容。
  3. 如果g()为真,第一个 f()为假,f()则再次评估 - 这可能是一个昂贵的操作,并且可能返回一个完全不同的值,然后将其取反并用于分支。

该声明:

if (g() ** f())

导致两个函数只计算一次,然后将结果逻辑组合到分支。

根据所需的副作用和/或评估顺序,您应该使用:

let gVal = g(), fVal = f();
if(gVal || !fVal) { ... }

或者

if(g() || !f()) { ... }

说了这么多,回答这个问题本身...... ECMAScript 2016 尚未最终确定,但您的假设似乎是正确的。

于 2015-11-23T10:21:18.063 回答
1

是的,求幂可用于 ES6 中的逆蕴涵。

您可以在此处验证这一点

于 2015-11-23T10:46:53.090 回答