JavaScript不借助第三个变量交换a,b两个变量值

[转载地址]http://blog.csdn.net/q1056843325/article/details/53223914

交换变量值方案一

最最最简单的办法就是使用一个临时变量了
不过使用临时变量的方法实在是太low了

var t;
t = a;
a = b;
b = t;
 
 

    首先把a的值存储到临时变量中
    然后b赋值给a
    最后拿出临时变量中的a值赋给b
    这个办法是最基本的了

    交换变量值方案二

    下面的方案都不会有临时变量
    我总结了一下
    其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值
    这样可以先改变另一个变量值,
    最后改变原修改的变量值
    比如这个

    a = a + b;
    b = a - b;
    a = a - b;

    让a先变成a与b的‘和’(也可以换成a和b的差,一样的)
    ‘和’减去b巧妙的得到了a的变量值赋予b
    再通过‘和’减去a的值得到了b的值赋予a
    或者是下面的变式(差的形式)

    a = a - b;
    b = a + b;
    a = b - a;

    但是感觉和的形式更容易理解

    交换变量值方案三

    这种方法对于第一次学习JavaScript的同学来说可能不了解
    因为我们javascript很少会用到位操作
    这是我在以前看算法竞赛书的时候学来的
    通过底层位运算来进行交换变量值
    也是上面的方案演化来的

    a ^= b;
    b ^= a;
    a ^= b;

    了解一下吧
    C++甚至可以a^=b^=a^=b来完成任务
    但我发现JavaScript不可以
    不过我们可以这样

    a = (b^=a^=b)^a;

    交换变量值方案四

    把a先变成了一个对象
    这个对象保存着应该交换后的键值对
    最后赋值搞定

    a = {a:b,b:a};
    b = a.b;
    a = a.a;

    交换变量值方案五

    和上面的方法很像,只不过对象换成了数组

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

    交换变量值方案六

    这个办法十分的巧妙
    不是我想出来的
    想出来的人一定是大神,除非他是托梦想出来的
    简单粗暴一行代码交换了a和b的变量值

    a = [b,b=a][0];
     
     

    根据运算符优先级,首先执行b=a
    此时的b直接得到了a的变量值
    然后一步数组索引让a得到了b的值(简直不能再厉害)

    交换变量值方案七

    最后我的方案是利用了ES6的解构赋值语法
    它允许我们提取数组和对象的值,对变量进行赋值
    (旧版本浏览器不能使用ES6语法)

    [a,b] = [b,a];

    可以看到解构赋值语法让我们的交换变量值变得超级简单
    这个解构赋值语法要是讲的话要讲很多不是今天的重点
    未来我再总结现在就不讲了


    总结了这么多交换变量值的方法
    不知道还有没有其他办法
    虽然它是一个无关紧要的问题
    不过可以练一练我们的脑洞(冏rz)
    分享给大家

    • 14
      点赞
    • 26
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值