评估表达式1 <=月<= 12

iaL*_*iaL 4 javascript java expression

我正试图(1 <= month <= 12)在if条件下评估表达式.

这个陈述似乎在javascript中有效,但在Java中则无效.

在Java中

int month = 0;
boolean flag = (1 <= month <= 12);
Run Code Online (Sandbox Code Playgroud)

它抛出以下错误:

对于参数类型boolean,int,运算符<=未定义

在Javascript中,

var month = 0;
console.log('Expression evaluates to: ', (1 <= month <= 12));
Run Code Online (Sandbox Code Playgroud)

true无论月份的价值是什么,它总是会返回.

有人可以解释一下:

  • 如果它是一个有效的表达式?
  • 为什么它总是屈服于truejavascript?
  • 为什么java会将其视为无效表达式?

我也知道我可以通过这种方式工作(1 <= month && month <= 12).所以,不是寻求解决方案而是寻求解释.

谢谢.如果我的问题不清楚,也请告诉我.

Wil*_*sem 10

<=是非关联的,所以你不能通过重复使用它.您可以使用以下命令指定:

1 <= month && month <= 12
Run Code Online (Sandbox Code Playgroud)

原因是JavaScript解析器解析1 <= month <= 12为:

(1 <= month) <= 12
Run Code Online (Sandbox Code Playgroud)

这是JavaScript语法的结果,他们本来可以定义它,但它会使问题复杂化.大多数语法将表达式定义为:

expr -> [0-9]+
expr -> identifier
expr -> expr '<=' expr
Run Code Online (Sandbox Code Playgroud)

(使用LALR)解析器.

Java的使用以下(近似)语法:

expr -> numExpr '<=' numExpr
expr -> numExpr
numExpr -> identifier
numExpr -> [0-9]+
(...and so on...)
Run Code Online (Sandbox Code Playgroud)

因此,在Java中,甚至不可能解析这样的表达式(除非你执行一次使其numExp再次成为演员表).


对于JavaScript部分,为什么总是返回true

现在(1 <= month)是一个布尔值(true/1或false/0),并且该值不能与12(0并且1总是小于或等于12)进行比较(合理).只有非常有限的编程语言支持这种功能.