gpt4 book ai didi

javascript - 为什么这些语句在 JavaScript 中的工作方式不同?

转载 作者:可可西里 更新时间:2023-11-01 02:26:02 26 4
gpt4 key购买 nike

我最近正在检查使用 XOR 函数交换两个变量的小代码。我为此使用了 JavaScript。

令 x 和 y 为两个变量并令 x = 4, y = 6

x = x ^ y;
y = y ^ x;
x = x ^ y;

它很好地交换变量。请注意,我保持 xy 不同,以防止由于第一个 XOR 而发生的别名。

然后,根据声明,我写道:x = x ^ (y = y ^ (x = x ^ y ));这正确地交换了变量 y 但使 x 始终为 0

此外,x ^= y ^= x ^= y; 似乎也是等价表达式,会产生与第二种情况相同的错误结果。

但是,所有这些语句在 Java 上都等效地运行并一致地产生相同的结果。

我还在 JavaScript 中使用了严格模式。

这三个语句在 JavaScript 上是否不等价,或者我在这里遗漏了一些关键的东西?

最佳答案

x = x ^ y;
y = y ^ x;
x = x ^ y;

这是可行的,因为它就像

x_1 = x_0 ^ y_0;
y_1 = y_0 ^ x_1;
x_2 = x_1 ^ y_1;

然后,

x_final = x_2 = x_1 ^ y_1 = x_0 ^ y_0 ^ y_0 ^ x_1 = x_0 ^ y_0 ^ y_0 ^ x_0 ^ y_0
= y_0
y_final = y_1 = y_0 ^ x_1 = y_0 ^ x_0 ^ y_0
= x_0;

你的 x = x ^ (y = y ^ (x = x ^ y ));就像

x_1 = x_0 ^ y_0;
y_1 = y_0 ^ x_1;
x_2 = x_0 ^ y_1;

然后,

x_final = x_2 = x_0 ^ y_1 = x_0 ^ y_0 ^ x_1 = x_0 ^ y_0 ^ x_0 ^ y_0
= 0
y_final = y_1 = y_0 ^ x_1 = y_0 ^ x_0 ^ y_0
= x_0;

如果你使用 x = (y = y ^ (x = x ^ y )) ^ x; 就可以了.

那是因为JS是从左到右解析表达式的,而你想要x是修改后的值,而不是初始值。

关于javascript - 为什么这些语句在 JavaScript 中的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38510401/

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