•  阅读 3 分钟

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

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

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

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

使用中间变量

let x = 10
let y = 20
const tmp = x
x = y
y = tmp
// x = 20
// y = 10

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

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

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

使用按位 XOR 运算符交换

let x = 10
let 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 结束。

仅仅对于数值有效

let x = 10
let y = 20
x = x + y
y = x - y
x = x - y
// x = 20
// y = 10

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

单行交换

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

使用数组

let x = 10
let y = 20

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

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

使用解构表达式

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

let x = 10
let y = 20

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

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

本文由 吳文俊 翻译,原文地址 all you need to know about swapping two variables in javascript

标签:
> cd ..