我想问为什么
alert(3>2>1); // (1)
Run Code Online (Sandbox Code Playgroud)
在Javascript中返回FALSE.
我知道正确的是:
alert(3>2 && 2>1); // (2)
Run Code Online (Sandbox Code Playgroud)
但是代码1应该返回错误消息或者为TRUE!这个等式返回FALSE的具体原因是什么?
ick*_*fay 37
如果你添加括号来展示JavaScript如何解释它,它会变得更加清晰:
alert( (3 > 2) > 1 );
Run Code Online (Sandbox Code Playgroud)
让我们分开吧.首先,它进行评估3 > 2.是的,三个大于两个.因此,你现在有这个:
alert( true > 1 );
Run Code Online (Sandbox Code Playgroud)
true被强迫变成一个数字.这个数字恰好是1.1 > 1显然是假的.因此,结果是:
alert( false );
Run Code Online (Sandbox Code Playgroud)
首先3>2计算为TRUE,它可能隐式转换为1,所以你最终得到1>1,这是假的.
你可能想要一个错误,但Javascript输入非常弱,所以它会尝试进行隐式转换,而不会抱怨.
编辑:
所以你问为什么编程语言语法并不总是与数学符号一致?我会说(1)它们有不同的优先级,(2)编译器以另一种方式做更有意义.
这种情况并不罕见:
x = 3(作业)x >> 1(bitshift)a | b(按位OR).名单继续......
| 归档时间: |
|
| 查看次数: |
4520 次 |
| 最近记录: |