相关疑难解决方法(0)

为什么JavaScript中的逻辑运算符是关联的?

逻辑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

25
推荐指数
2
解决办法
1684
查看次数