我对JavaScript二进制逻辑操作的“如何工作”知识感兴趣,但我陷入了阶段性的错误。
这是对规格的描述
12.13.3
LogicalANDExpression:LogicalANDExpression && BitwiseORExpression
- 让 lref 成为评估 LogicalANDExpression 的结果。
- 让 lval 成为?的GetValue ( LREF )。
- 让 lbool 为 ToBoolean ( lval )。
- 如果 lbool 为false,返回 lval 。
- 让 rref 成为评估 BitwiseORExpression 的结果。
- 回归?的GetValue ( RREF )。
醇>
我读的就像:
为左操作数占用内存,此处为操作结果
获取内存中左操作数的值并将其转换为布尔值
如果此布尔值为false,则返回左操作数
为右操作数占用内存,这将是...... BitwiseORExpression < - 什么?按位?为了什么?为什么吗
我想以更易读的形式澄清这个算法,以了解它的工作原理。什么是p.1和p.5,究竟是什么 lref 和 rref ,究竟是什么 LogicalANDExpression 和 BitwiseORExpression 在那种情况下?
答案 0 :(得分:2)
BitwiseORExpression 这里只是引用右侧操作数的(表达式),就像 LogicalANDExpression 指的是正确推导出的左侧的那个。它取决于您当前正在评估的代码(或者更确切地说是其解析形式,AST),它可以是basically anything,并且不需要包含|
运算符。
答案 1 :(得分:1)
这就是我读它的方式(感谢Bergi的精确度):
0 && 'foo'
获取0
为结果,而不是false
)1 && 'foo'
得到'foo'
而不是{{1} }}或1
)