加减法
var a = 1, b = 2; a = a + b; b = a - b; a = a - b; console.log(a, b); // 2, 1
该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失,例如:
var a = 1.123456789, b = 2.987654321; a = a + b; b = a - b; a = a - b; console.log(a, b); // 2.987654321, 1.1234567889999996
乘除法
var a = 3, b = 4; a = a * b; b = a / b; a = a / b; console.log(a, b); // 4, 3
乘除法更像是加减法向乘除运算的映射,它与加减法类似:可以处理整型和浮点型变量,但在处理浮点型变量时也存在精度损失问题。而且乘除法比加减法要多一条约束:b 必不为 0。
异或法
var a = 5, b = 6; a ^= b; // a = a^b; b ^= a; // b = b^a = b^(a^b) = b^a^b = b^b^a = 0^a = a; a ^= b; // a = a^b = (a^b)^a = a^b^a = a^a^b = 0^b = b; console.log(a, b); // 6, 5
异或法可以完成对整型变量的交换,对于浮点型变量它无法完成交换。