Flanagan的O'Reilly JavaScript书籍指出:
与&&和||不同 经营者,!运算符在反转转换后的值之前将其操作数转换为布尔值[...].
如果这些逻辑运算符不将操作数转换为布尔值,那么如何计算表达式?
Poi*_*nty 10
它们确实将值转换为boolean,但仅用于确定如何继续评估表达式.表达式的结果不一定是布尔值(事实上,如果你的操作数都不是boolean,它就不会给你一个布尔值):
var x = false || 'Hello' // gives you 'Hello'
var y = 0 && 1 // gives you 0, because 0 is "falsy" and short circuits
var z = 1 || 2 // gives you 1, because 1 is "truthy" and short circuits
Run Code Online (Sandbox Code Playgroud)
小智 5
根据规范,第 11.11 节:二元逻辑运算符:
[评估] 的产生&&...评估如下:
ToBoolean(lval)为 false,则返回 lval。[评估] 的产生||...评估如下:
ToBoolean(lval)为 true,则返回 lval。所以在内部该值被“转换为布尔值”。然而,由于这一点从未暴露出来——并且整个语义解释是一个可以被“优化”的抽象——&&并且 和的行为||可以通过使用真值和假值来简单地解释(其中ToBoolean涵盖:真值是ToBoolean返回 true 的值,所有其他值都是 false)。
的逻辑表&&是:
抗体结果 真实的任何b 任意 a 为假
的逻辑表||是:
抗体结果 真实的任何一个 任意 b 为假值
请注意,要么返回a或 的计算值。b
快乐编码。
为了完整起见,请参阅第 9.2 节:
抽象操作ToBoolean将其参数转换为布尔类型的值,如...
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |