面试题:变量交换的高级方式

本文介绍了三种在JavaScript中不借助第三个变量实现变量交换的方法:数学计算、异或操作以及利用Es6的解构赋值。通过实例展示了如何使用这些技巧处理数字和可能的数据类型转换。
摘要由CSDN通过智能技术生成
var a = 6;
var b = 5;
// 如何不借助第三个变量完成上面的交换

1、通过数学计算解决

a = a + b;
b = a - b;
a = a - b;
console.log(a,b);

a = a + b; 此时 a 为 a和b值的混合,再用这个混合去减去b就是原来的a;在复制给b;此时b就是原来的a;混合减去现在b(及原来的a)就得到了b,再赋值给a,就完成了交换。
2、通过异或解决

a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log(a,b);
// 异或 
//  0 1 1 0   a
//  0 1 0 1   b
//  ------------------ 取异或
//  0 0 1 1  赋值给a(混合)
//  0 1 0 1    b
//  ------------------ 取异或
//  0 1 1 0    原来的a,赋值给b
//  0 0 1 1     混合
//  ------------------ 取异或
//  0 1 0 1     赋值给a 完成交换

^ 为异或 要转成二进制,对两个二进制数的每一位相同取0,不同取1;题中a(6)转为二进制为0110,b(5)转为二进制为0101;去异或为 0011 赋值给a,也是a,b 的混合,这时这个混合表示这俩数二进制的差异。再对 此时的a和b进行异或 得 0110 ;这个值和原来a的值一样;所以就把a 赋值给了b;再用混合和现在的b去异或,得到的就是原来的b;

3、上面的方式只能针对数字交换进行,想要针对所有数据类型可以利用Es6中的结构;

[b , a] = [a ,b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值