在咱们学习编程之初,就学习过变量的赋值操做,同时也学习了将一个变量的值赋值给另一个变量。对于交换两个变量的值,不少童鞋都有解决方案。然鹅,对于面试官提出的不借助第三变量来交换两个变量的值,你能想到几种解决方案呢?前端
若是你只知道一种方案,请你认真看下去...
若是你知道两种方案,那么你能够来了解更多方案了...
让咱们由浅入深,来了解交换变量值的最简单、最初的解决方案:借助于第三个变量面试
// 声明变量a和b let a = 5 let b = 4 // 1. 临时将变量a的值赋值给变量tmp let tmp = a // 2. 将变量b的值赋值给a a = b // 3. 将变量a的值(tmp的值)赋值给b b = tmp console.log(a) // 4 console.log(b) // 5
so east!
面试官在听到上面给出的解决方案后,微微一笑(脑海中闪现到:你觉得就这么简单)说道,有其余解决方案吗,不借助第三变量呢?编程
了解学习了JS ES6的数组解构赋值的童鞋对此冷冷一笑,嘴角一撇,冷酷酷地说道:也可使用ES6的数组解构赋值来交换变量的值。数组
let a = 5; let b = 4; // 请注意此位置的分号;是必定要存在的呀 // 数组结构赋值,交换变量a,b的值 [a, b] = [b, a] console.log(a) // 4 console.log(b) // 5
看到面试官的脸色彷佛渐渐露出了满意的神色,心里是否是有点儿窃喜。
若是此刻面试官又说道,还有没有其余的解决方案,小朋友,你是否是有许多问号?
胡哥在这里再次强调,这绝对不是一个考验“智商”的答案,只是考验了在编程的变通能力以及经验问题,下面请看代码的实现。架构
let a = 5 let b = 4 // 接下来就是见证神奇的时刻,来,镜头请对准我。 // 两者之和 a = a + b // 两者之和 - b的值,剩余a的值赋值给变量b b = a - b // 此刻a仍是两者之和,a - b此刻至关于两者之和 - 变量b(a的值),那么此刻剩余的就是变量b的值,赋值给a变量 a = a - b // yes, we did! console.log(a) // 4 console.log(b) // 5
若是此刻面试官再问出还有没有其余的方案,此刻你会慌的一比呢,仍是心里大喊“wc”呢
不要怕,兄弟们,接下来给你们来分享第四种方式,位运算符 ^ 异或。在变量的运算中这个操做符有什么做用呢?框架
异或运算符:学习
是执行位运算的,二进制运算,参与变量运算的两个变量要转为二进制进行运算。 若是相同二进制位的值相同,则转为0,不然转为1.
那交换两个变量的值具体代码是如何实现的呢?请看大屏幕,哦,不,请往下看。code
let a = 5 // 0101 let b = 4 // 0100 // 按位异或运算 a = a ^ b // 0101 ^ 0100 ===> 0001,此时a的值为1 b = a ^ b // 0001 ^ 0100 ===> 0101,此时b的值为5 a = a ^ b // 0001 ^ 0101 ===> 0100,此时a的值为4 console.log(a) // 4 console.log(b) // 5
惊不惊喜,意不意外。。。
以上四种实现交换两个变量值得方案你都掌握了吗,若是掌握了,能够对面试官反手就是一个“吊打”了。
若是你有更多的解决交换两个变量值的方案,欢迎留言交流呀!数学
以上就是胡哥今天给你们分享的内容,喜欢的小伙伴记得点赞
、收藏
呦,关注胡哥有话说,学习前端不迷路,欢迎多多留言交流...系统架构
胡哥有话说,专一于大前端技术领域,分享前端系统架构,框架实现原理,最新最高效的技术实践!