gpt4 book ai didi

java - ECMAScript 与 C/Java 的 ConditionalExpression 语法差异

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:47 25 4
gpt4 key购买 nike

引自ECMAScript Language Specification

The grammar for a ConditionalExpression in ECMAScript is a little bit different from that in C and Java, which each allow the second subexpression to be an Expression but restrict the third expression to be a ConditionalExpression. The motivation for this difference in ECMAScript is to allow an assignment expression to be governed by either arm of a conditional and to eliminate the confusing and fairly useless case of a comma expression as the centre expression.

有人可以使用示例更详细地解释差异吗?useless case of a comma expression as the center expression 是什么意思?为什么 C/Java 中的条件表达式不允许赋值表达式由条件的任一分支控制

最佳答案

在 JavaScript 中,你可以这样做:

foo(condition ? a = 1 : b = 2);

(您是否应该是另一回事,但您可以。)

...结果将是评估条件,a 被分配 1b 被分配 2,然后使用 12 调用 foo

你不能在 Java 中这样做(我不能说 C,它已经 ~25 年了),因为它不允许你在第三个操作数中放置赋值表达式。奇怪的是,它确实允许您在第二个操作数中放置一个赋值表达式,因此您可以这样做:

foo(condition ? a = 1 : 2);

...甚至在 Java 中。

回到 JavaScript:如果你不被允许这样做

foo(condition ? a = 1 : b = 2);

...出于与 Java 相同的原因,您可以通过这样做来解决它:

foo(condition ? a = 1 : (b = 2, b));
// ---------------------^-----^^^^

...因为 JavaScript 有逗号运算符,它计算它的操作数,然后取右边操作数的结果作为它的值。逗号表达式 (b = 2, b) 不是赋值表达式,因此它会绕过一个限制,不允许在条件运算符的第三个操作数中使用赋值表达式(即使其中一个表达式输入逗号表达式 b = 2 是一个赋值表达式)。

因此,即使在第三个操作数中也允许赋值表达式,JavaScript 避免了在那里无意义地使用逗号表达式。

关于java - ECMAScript 与 C/Java 的 ConditionalExpression 语法差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49608388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com