欢迎访问欧博网址!

首页快讯正文

绍兴旅行:面试官在“逗”你系列:不借助第三变量交流两个变量值的方案你有几种?

admin2020-04-1521

弁言

在我们学习编程之初,就学习过变量的赋值操作,同时也学习了将一个变量的值赋值给另外一个变量。对于交流两个变量的值,许多童鞋都有解决方案。然鹅,对于面试官提出的不借助第三变量来交流两个变量的值,你能想到几种解决方案呢?

若是你只知道一种方案,请你认真看下去...
若是你知道两种方案,那么你可以来领会更多方案了...

一、最简朴的实现-最初的影象

让我们由浅入深,来领会交流变量值的最简朴、最初的解决方案:借助于第三个变量

// 声明变量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!

二、不借助第三变量的实现-ES6版

面试官在听到上面给出的解决方案后,微微一笑(脑海中闪现到:你以为就这么简朴)说道,有其他解决方案吗,不借助第三变量呢?

领会学习了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.

那交流两个变量的值详细代码是若何实现的呢?请看大屏幕,哦,不,请往下看。

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

惊不惊喜,意不意外。。。

以上四种实现交流两个变量值得方案你都掌握了吗,若是掌握了,可以对面试官反手就是一个“吊打”了。
若是你有更多的解决交流两个变量值的方案,迎接留言交流呀!

后记

以上就是胡哥今天给人人分享的内容,喜欢的小伙伴记得点赞珍藏呦,关注胡哥有话说,学习前端不迷路,迎接多多留言交流...

胡哥有话说,一个有手艺,有情怀的胡哥!现任京东前端攻城狮一枚。
胡哥有话说,专注于大前端手艺领域,分享前端系统架构,框架实现原理,最新最高效的手艺实践!

,

阳光在线娱乐

阳光在线(原诚信在线官网)现已开放阳光在线手机版、阳光在线电脑客户端下载。阳光在线娱乐戏公平、公开、公正,用实力赢取信誉。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源自欧博网址!

本文链接:http://www.cx11yx.cn/post/946.html