我正在尝试在if条件下评估表达式(1 <= month <= 12)。
该语句在javascript中似乎有效,但在Java中无效。
在Java中,
int month = 0;
boolean flag = (1 <= month <= 12);
它引发以下错误:
The operator <= is undefined for the argument type(s) boolean, int
在Javascript中,
var month = 0;
console.log('Expression evaluates to: ', (1 <= month <= 12));
It always returns true no matter what the value of month is.
有人可以解释一下:
是否为有效表达式?
为什么它总是在javascript中生成为true?
为什么Java会将其视为无效表达式?
我也知道我可以通过(1 <= month && month <= 12)使其工作。因此,不是在寻找解决方案,而是在寻求解释。
谢谢。如果我的问题不清楚,也请告诉我。
最佳答案
<=是非关联的,因此您不能通过重复使用它。您可以使用以下命令指定它:
1 <= month && month <= 12
原因是JavaScript解析器将1 <= month <= 12解析为:
(1 <= month) <= 12
这是JavaScript语法的结果,他们本可以用其他方式定义它,但这会使事情复杂化。大多数语法将表达式定义为:
expr -> [0-9]+
expr -> identifier
expr -> expr '<=' expr
(带有LALR)解析器。
Java使用以下(近似)语法:
expr -> numExpr '<=' numExpr
expr -> numExpr
numExpr -> identifier
numExpr -> [0-9]+
(...and so on...)
因此,在Java中,甚至无法解析此类表达式(除非您执行强制将其再次变为numExp的强制转换)。
对于JavaScript部分,为什么它总是返回true?
现在(1 <= month)是一个 boolean 值(true/1或false/0),并且该值不能与12进行比较(合理)(0和1始终小于或等于12)。仅非常有限的编程语言支持该功能。