java - 计算表达式 1 <= month <= 12

标签 java javascript expression

我正在尝试计算表达式 (1 <= month <= 12)在 if 条件下。

这条语句在 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.

谁能解释一下:

  • 它是否是一个有效的表达式?
  • 为什么它总是屈服于true在 javascript 中?
  • 为什么 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 进行比较( 01 总是小于或等于 12 )。只有非常有限的编程语言支持此功能。

关于java - 计算表达式 1 <= month <= 12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29415399/

相关文章:

java - 通用快速排序导致 StackOverflowError

Java接口(interface)的实现?

Java从字符串中间读取整数

java - "No suitable method found for sort(List<VarStatusMsg<? extends Number>>)"JDK错误

javascript - 如何用html php js打印身份证?

javascript - 动态重新加载本地 JavaScript 源/JSON 数据

javascript - jQuery:根据任意数量的复选框隐藏/显示 div

c# - 将两个 lambda 表达式与内部表达式结合起来

math - 存储复杂的数学表达式

PHP - 删除任何字母前的任何数字