交换两个数
C++:
int a = 3;
int b = 5;
a^=b^=a^=b;
printf("%d, %d\n", a, b); //5, 3
PHP:
$a = 3; $b = 5;
$a^=$b^=$a^=$b;
echo "$a, $b\n"; //5, 3
Javascript:
> a=3;b=5;a^=b^=a^=b;[a,b]
[ 0, 3 ]
为什么?似乎所有变量都在执行所有表达式之前初始化...
交换两个数
C++:
int a = 3;
int b = 5;
a^=b^=a^=b;
printf("%d, %d\n", a, b); //5, 3
PHP:
$a = 3; $b = 5;
$a^=$b^=$a^=$b;
echo "$a, $b\n"; //5, 3
Javascript:
> a=3;b=5;a^=b^=a^=b;[a,b]
[ 0, 3 ]
你在JS中的作业相当于
a = a ^ (b = b ^ (a = a ^ b));
而且这是从左到右计算的,对于a,我们得到
3 ^ (5 ^ (3 ^ 5))
a = (b ^= (a ^= b)) ^ a;
欢迎来到JS的世界 =)