java w3,java

这篇博客探讨了JavaScript和Java中条件表达式的不同处理方式。在JavaScript中,表达式(1<=month<=12)总是返回true,而在Java中则会导致错误,因为Java不支持这种连续的不关联操作符。作者指出,正确的方法是在Java中使用(1<=month && month<=12)。博客深入解释了这种差异的原因,涉及到解析器的语法规则,并提醒开发者注意不同语言的语法特性。
摘要由CSDN通过智能技术生成

我正在尝试在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)。仅非常有限的编程语言支持该功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值