[转载地址]http://blog.csdn.net/q1056843325/article/details/53223914
交换变量值方案一 最最最简单的办法就是使用一个临时变量了
不过使用临时变量的方法实在是太low了
var t;
t = a;
a = b;
b = t;
首先把a的值存储到临时变量中
然后b赋值给a
最后拿出临时变量中的a值赋给b
这个办法是最基本的了
交换变量值方案二 【js|JavaScript不借助第三个变量交换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)
分享给大家
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- JS/JavaScript|JS/JavaScript CRC8多项式 16进制