在ES7中使用求幂运算符转换蕴涵逻辑
Converse implication logic using exponentiation operator in ES7?
通过这个链接,我们知道
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蕴涵。
给定函数f()
和g()
的返回值为boolean
。所以我们可以使用这个简单的代码
if (g() ** f()) {
//
}
取代
if ((g() && f()) || !f()) {
//
}
这里有一些测试代码。根据ES7,它是否有效?
语句:
if ((g() && f()) || !f()) {
由于短路机制,有几个潜在的不良影响:
- 如果
g()
是falsy,则对f()
求值一次,并使用否定的结果进行分支 - 如果
g()
是真的,并且第一个f()
也是真的,则评估if
块的内容 - 如果
g()
是真的,并且第一个f()
是假的,则再次评估f()
——这可能是一个代价高昂的操作,并且可能返回一个完全不同的值,然后将其取反并用于分支
声明:
if (g() ** f())
两个函数中的结果只计算一次,然后将结果逻辑组合到分支中。
根据所需的副作用和/或评估顺序,您应该使用:
let gVal = g(), fVal = f();
if(gVal || !fVal) { ... }
或
if(g() || !f()) { ... }
说了这么多,为了回答问题本身。。。ECMAScript 2016尚未最终确定,但您的假设似乎是正确的。
是的,指数可以用于ES6中的逆蕴涵。
您可以在此处验证
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- 这是什么 ==- javascript 运算符
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 将数字转换为一定数量的硬币
- 将纯文本URL转换为可单击链接
- 为什么运算符equal没有将从valueOf()获得的null转换为零
- JavaScipt的数据类型转换对于“==”运算符究竟是如何工作的
- 如何将|=运算符从JavaScript转换为Delphi
- 在ES7中使用求幂运算符转换蕴涵逻辑
- 将三元条件运算符转换为if语句
- 将JavaScript三元运算符转换为完整的if/else语句问题
- 转换成三元运算符
- 将数学运算符作为字符串参数转换为javascript中的实数运算符
- 将三元运算符转换为传统if语句时未定义的变量
- 做&&并且||运算符将其操作数转换为布尔值