gpt4 book ai didi

java - 带条件和赋值运算符的表达式

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:59:44 25 4
gpt4 key购买 nike

这个 Javascript 表达式在所有浏览器中都工作得很好 (jsfiddle):

false ? 1 : x = 2;

它的计算结果为 2。

但是为什么?我希望这里有一个异常(exception),因为赋值的左侧是 false ? 1 : x,这不是有效的引用。与 ( jsfiddle ) 比较:

(false ? 1 : x) = 2;

这个正在抛出一个ReferenceError。我仔细检查了 Javascript operator precedence table ,它声明条件运算符 ? : 比赋值运算符 = 具有更高的优先级,因此两个表达式应该相同,至少我是这样。

在 Java 中,它具有与 Javascript 非常相似的语法和运算符优先级规则,上面的两个表达式都会导致编译时错误,这是非常合理的。

谁能解释一下这个区别?

最佳答案

正如您在 MDN 上找到的那样,? :优先级高于赋值运算符 = ,这意味着 JS 将您的语句读取为:

false ? 1 : (x = 2);

乍一看这似乎是倒退的,但它的意思是 ? :需要三个操作数,: 右边的部分作为第三个操作数。自 =具有较低的优先级 x = 2成为第三个操作数。

警报显示 2因为分配x = 2设置 x变量为 2然后这个(子)表达式计算为 2 .

你的第二个版本:

(false ? 1 : x) = 2;

...给出引用错误,因为它执行 (false ? 1 : x)第一部分评估为 关联的值 x ( undefined ),它不返回变量 x本身。 undefined = 2不起作用。

关于java - 带条件和赋值运算符的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16872302/

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