Zau*_*bov 9 javascript c bit-manipulation equality
我偶然发现了使用按位运算符的JavaScript情况.逻辑上,按位运算符应该具有比等于运算符更高的优先级,例如
if val & 10 == 10
alert('flag set')
Run Code Online (Sandbox Code Playgroud)
但看起来这个代码会以另一种方式工作,因为在JavaScript中,按位运算符的优先级低于等式运算符(参见Mozilla的JS参考).上面的代码总是返回0任何有效的数值val,因为结果val & true是0.因此,正确的方法是将括号放在按位表达式周围:
if (val & 10) == 10
alert('flag set')
Run Code Online (Sandbox Code Playgroud)
我挖出了这个问题的历史,看起来这种行为来自于K&R的C时代,其中逻辑&&和||运算符是按比例添加的.就C中的逻辑陈述而言:
if (x == 1 & y == 0) {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
有一个完美的感觉.但它在按位逻辑方面没有任何意义.
C++,Java,Objective-C,PHP,C#,最后Javascript也有同样的方式.Python,Ruby,Go反过来说.
您是否知道任何原因(除了来自C的遗产之外)使编程语言的设计者遵循C的优先规则?
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |