奇怪的javascript行为(作业)

vp_*_*rth 5 javascript swap operator-precedence

交换两个数字

C++:

int a = 3;
int b = 5;
a^=b^=a^=b;
printf("%d, %d\n", a, b); //5, 3
Run Code Online (Sandbox Code Playgroud)

PHP:

$a = 3; $b = 5;
$a^=$b^=$a^=$b;
echo "$a, $b\n"; //5, 3
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

> a=3;b=5;a^=b^=a^=b;[a,b]
[ 0, 3 ]
Run Code Online (Sandbox Code Playgroud)

为什么?看起来在所有表达式执行之前初始化所有变量...

aZe*_*Zen 6

你在JS中的任务相当于

a = a ^ (b = b ^ (a = a ^ b));
Run Code Online (Sandbox Code Playgroud)

并且从左到右进行评估,我们得到了

3 ^ (5 ^ (3 ^ 5))
Run Code Online (Sandbox Code Playgroud)

所以一个简单的解决方法是写

a = (b ^= (a ^= b)) ^ a;
Run Code Online (Sandbox Code Playgroud)

欢迎来到JS的世界=)