为什么“(state==1&&3)”有意义
Why does `(state == 1 && 3)` make sense?
我在Mithril.js
:中发现了这段代码
finish(state == 1 && 3)
在我(Java/C程序员)看来,如果state
是1
,它似乎应该总是调用finish(true)
;如果state
不是1
,它应该调用finish(false)
。但它实际上似乎为前者做了finish(3)
,为后者做了finish(false)
。
这背后的逻辑是什么?
这在JavaScript中是惯用的,还是一个坏主意?对我来说,这太晦涩了。
您可以这样解释运算符||
和&&
:
A || B
→ A ? A : B
A && B
→ A ? B : A
但未对CCD_ 12进行两次评估。
这是JavaScript的一个特性,&;和||运算符总是返回它计算的最后一个值。
在JavaScript中,&&
运算符不会将结果强制为布尔值。相反,它类似于:
var _temp = state == 1;
finish(_temp ? 3 : _temp);
测试左侧的真实性,然后在truthy时返回右侧,否则返回左侧。
比较a && b
实际返回的值是表达式中最后一个求值的值,而不是true
或false
。
您可以参考规格:
产品LogicalANDExpression&BitwiseORExpression的评估如下:
- 设lref是求值LogicalANDExpression的结果
- 设lval为GetValue(lref)
- 如果ToBoolean(lval)为false,则返回lval
- 设rref是评估BitwiseORExpression的结果
- 返回GetValue(rref)
相关文章:
- 在前端javascript应用程序中使用DI容器有意义吗
- Node.js时使用async是有意义的
- Angular $q.reject().success(),这有意义吗?
- 在JavaScript中使用===进行字符串比较有意义吗
- 传递给IIFE包装器有多少全局变量是有意义的
- 将Epoch日期转换为有意义的Javascript日期
- 在标准ES6类中添加getter方法有意义吗
- 为给定数量的空格查找可能数量的有意义的英语单词
- 使用 html 选择和日期的依赖日期选择器有意义
- 在这个jQuery插件中,哪种策略更有意义
- 拥有基本服务是否有意义,如果是这样,这是一种好方法
- JS:如何在保持n个有意义的数字的同时简化列表的过度精确数字
- 在Lua VM上运行JavaScript是否有意义
- 在Java 8 Nashorn JavaScript引擎中同时加载脚本是否有意义
- 新手:在MDN上有意义的Javascript闭包示例
- 只使用twitter引导程序中的插件有意义吗
- 将angular服务与es6模块一起使用有意义吗
- 这个JavaScript函数有什么作用?有意义吗
- 在这种情况下,New有意义吗
- 为什么“(state==1&&3)”有意义