交换变量值的方法

140 阅读1分钟

1、解构赋值交换变量

let a = 0,b = 1
//我的理解是相当于创建了两个不同的数组
[b,a] = [a,b] 

image.png

2、异或交换变量

//以下为伪代码解释:
//运用了异或的交换律和相同为零的规则
let a = 0,b = 1
//第一步: 
a = a ^ b
//第二步:等量代换(把上面的a代入下面的代码中)   
b = a ^ b ^ b = a
//第三步:等量代换(把上面的a和b,代入下面的代码中)   
a = a ^ b ^ a = b ^ a ^ a = b

简写:
let a = 0,b = 1
a ^= b
b ^= a
a ^= b

image.png

3、中间变量交换

//设置中间中间变量
let a = 0,b = 1,temp
//把a赋值给temp
temp = a
//把b赋值给a
a = b
//把temp赋值给b
b = temp

image.png

4、加减法变量交换

//以下为伪代码解释:
let a = 0, b = 1
//和相加
a = a + b
//第二步:等量代换(把上面的a代入下面的代码中)   
b = a - b = a + b - b = a
//第三步:等量代换(把上面的a和b,代入下面的代码中)  
a = a - b = a + b - a = b

简写:
let a = 0,b = 1
a += b
b -= a
a -= b

image.png

5、利用数组的特性(涉及堆和栈的一些东西)

//数组是复杂数据类型,这种方法相当于另开辟了一个空间来,用数组来存放变量值。
let a = 0, b = 1
//[b,b=a]中a,b的存储地址不为上述a,b的存储地址。值相等但存储地址已不同
a = [b,b=a][0] //等价于 b = [a ,a=b][0];

image.png

6、利用数组的特性

let a = 0,b = 1
a = [a,b]
b = a[0]
a = a[1]

image.png

7、利用对象的特性

let a = 0,b = 1
a = {a:b,b:a}
b = a.b
a = a.a

image.png