该逻辑AND和OR运算是在JavaScript中只有懒运营三元一起条件运算符.他们使用以下规则进行短路评估测试:
false && anything === false
true || anything === true
Run Code Online (Sandbox Code Playgroud)
这与在Haskell中实现的方式相同:
(&&) :: Bool -> Bool -> Bool
False && _ = False
True && x = x
(||) :: Bool -> Bool -> Bool
True || _ = True
False || x = x
Run Code Online (Sandbox Code Playgroud)
但是根据MDN,JavaScript中的逻辑运算符是左关联的.这是违反直觉的.在我的拙见中,他们应该是正确的联想.Haskell做对了.Haskell中的逻辑运算符是正确的关联:
infixr 3 &&
infixr 2 ||
Run Code Online (Sandbox Code Playgroud)
考虑Haskell中的以下表达式:
False && True && True && True
Run Code Online (Sandbox Code Playgroud)
因为&&在Haskell中是正确关联的,所以上面的表达式相当于:
False && (True && (True && True))
Run Code Online (Sandbox Code Playgroud)
因此,表达式 …
javascript haskell logical-operators associativity ecmascript-5