根据这个link,我们知道
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中通过
exponentiation operator
实现Converse implication。给定函数
f()
和g()
的返回值是boolean
。所以我们可以使用这个简单的代码if (g() ** f()) {
//
}
取代
if ((g() && f()) || !f()) {
//
}
一些测试代码是here。在ES7下有效吗?
最佳答案
该声明:
if ((g() && f()) || !f()) {
由短路机制引起的潜在潜在不良影响:
如果
g()
虚假,则对f()
进行一次评估,并将求反的结果用于分支。如果
g()
是真实的,并且第一个f()
也是真实的,则评估if
块的内容。如果
g()
是真实的,而第一个f()
是虚假的,则再次评估f()
-这可能是一项昂贵的操作,并且可能返回完全不同的值,然后取反并用于分支。该声明:
if (g() ** f())
结果这两个函数只进行了一次评估,然后将结果进行逻辑组合以分支。
根据所需的副作用和/或评估顺序,您应使用:
let gVal = g(), fVal = f();
if(gVal || !fVal) { ... }
要么
if(g() || !f()) { ... }
话虽如此,回答问题本身... ECMAScript 2016尚未最终确定,但您的假设似乎正确。