在 JavaScript 中需要知晓的交换两个变量值

在 JavaScript 中需要知晓的交换两个变量值

交换两个变量值通常必须一个中间变量或者 XOR swap algorithm 如同例子 #2。我们将学习 JavaScript 中交换两个变量的两类状况和五种方法。

  1. 如果变量类型是 number,例子 #2 和 #3 是有效的。
  2. 如果变量的类型是任意类型比如 string, number, object, array 等,剩余的其它方法有效。

让我们了解 JavaScript 中交换变量的这五种不同的方法,这里是第一种。

使用中间变量

var x = 10;
var y = 20;
var tmp = x;
x = y;
y = tmp;
// x = 20
// y = 10

上面的方法可以用于交换任意类型的两个变量。

在上面的例子中,我们创建一个变量 tmp 来接受 x 的值,接着赋值 yx,然后赋值 tmpx

不使用中间变量交换变量值

使用按位 XOR 运算符交换

var x = 10;
var y = 20;
x ^= y;
y ^= x;
x ^= y;
// x = 20
// y = 10

想要更彻底理解这个代码请阅读 wiki XOR swap algorithm

JavaScript 的按位 xor 运算符转换它的操作数为 32 位整数(使用 ToInt32 的方法—了解 ECMAScript 标准的章节 11.10。对于非整数数值,它不会产生正确的结果。还将非数字值转换为 32 位整数。 如果以 x="hi"y="there" 开头,则最终以 x == 0y == 0 结束。

仅仅对于数值有效

var x = 10;
var y = 20;
x = x + y;
y = x - y;
x = x - y;
// x = 20
// y = 10

上面的例子仅仅对于类型是 number 的变量有效。所以确定你使用的类型。

单行交换

在这里我将向你展示可以在单行交换任意类型的变量的一对方法。

使用数组

var x = 10;
var y = 20;

y = [x, (x = y)][0];
// x = 20
// y = 10

首先使用数组,它将 x 的值保留在该数组的 0 位置,然后将 y 的值赋给该数组第二个位置的 x,然后表达式将数组 0 的值赋给 y,即 实际上是 x

使用解构表达式

这是我最喜欢的方法,使用解构表达式简洁且可读地交换两个变量的方法,参阅下面的例子:

var x = 10;
var y = 20;

[x, y] = [y, x];
console.log(x); // 20
console.log(y); // 10

但是小心这仅在 ES6 及以上提供支持。