引言


          在我們學(xué)習(xí)編程之初,就學(xué)習(xí)過(guò)變量的賦值操作,同時(shí)也學(xué)習(xí)了將一個(gè)變量的值賦值給另外一個(gè)變量。對(duì)于交換兩個(gè)變量的值,很多童鞋都有解決方案。然鵝,對(duì)于面試官提出的不借助第三變量來(lái)交換兩個(gè)變量的值,你能想到幾種解決方案呢?

          如果你只知道一種方案,請(qǐng)你認(rèn)真看下去...
          如果你知道兩種方案,那么你可以來(lái)了解更多方案了...

          一、最簡(jiǎn)單的實(shí)現(xiàn)-最初的記憶

          讓我們由淺入深,來(lái)了解交換變量值的最簡(jiǎn)單、最初的解決方案:借助于第三個(gè)變量
          // 聲明變量a和b let a = 5 let b = 4 // 1. 臨時(shí)將變量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!

          二、不借助第三變量的實(shí)現(xiàn)-ES6版

          面試官在聽(tīng)到上面給出的解決方案后,微微一笑(腦海中閃現(xiàn)到:你以為就這么簡(jiǎn)單)說(shuō)道,有其他解決方案嗎,不借助第三變量呢?

          了解學(xué)習(xí)了JS ES6的數(shù)組解構(gòu)賦值的童鞋對(duì)此冷冷一笑,嘴角一撇,冷酷酷地說(shuō)道:也可以使用ES6的數(shù)組解構(gòu)賦值來(lái)交換變量的值。
          let a = 5; let b = 4; // 請(qǐng)注意此位置的分號(hào);是一定要存在的呀 // 數(shù)組結(jié)構(gòu)賦值,交換變量a,b的值 [a, b] = [b,
          a] console.log(a) // 4 console.log(b) // 5
          看到面試官的臉色似乎漸漸露出了滿(mǎn)意的神色,內(nèi)心是不是有點(diǎn)兒竊喜。
          如果此刻面試官又說(shuō)道,還有沒(méi)有其他的解決方案,小朋友,你是不是有許多問(wèn)號(hào)?

          三、不借助第三變量的實(shí)現(xiàn)-終極版本一:?jiǎn)渭償?shù)學(xué)運(yùn)算

          胡哥在這里再次強(qiáng)調(diào),這絕對(duì)不是一個(gè)考驗(yàn)“智商”的答案,只是考驗(yàn)了在編程的變通能力以及經(jīng)驗(yàn)問(wèn)題,下面請(qǐng)看代碼的實(shí)現(xiàn)。
          let a = 5 let b = 4 // 接下來(lái)就是見(jiàn)證神奇的時(shí)刻,來(lái),鏡頭請(qǐng)對(duì)準(zhǔn)我。 // 二者之和 a = a + b // 二者之和 -
          b的值,剩余a的值賦值給變量b b = a - b // 此刻a還是二者之和,a - b此刻相當(dāng)于二者之和 -
          變量b(a的值),那么此刻剩余的就是變量b的值,賦值給a變量 a = a - b // yes, we did! console.log(a) // 4
          console.log(b) // 5
          如果此刻面試官再問(wèn)出還有沒(méi)有其他的方案,此刻你會(huì)慌的一比呢,還是內(nèi)心大喊“wc”呢

          四、不借助第三變量的實(shí)現(xiàn)-終極版本二:位運(yùn)算符^

          不要怕,兄弟們,接下來(lái)給大家來(lái)分享第四種方式,位運(yùn)算符 ^ 異或。在變量的運(yùn)算中這個(gè)操作符有什么作用呢?

          異或運(yùn)算符:
          是執(zhí)行位運(yùn)算的,二進(jìn)制運(yùn)算,參與變量運(yùn)算的兩個(gè)變量要轉(zhuǎn)為二進(jìn)制進(jìn)行運(yùn)算。 如果相同二進(jìn)制位的值相同,則轉(zhuǎn)為0,否則轉(zhuǎn)為1.
          那交換兩個(gè)變量的值具體代碼是如何實(shí)現(xiàn)的呢?請(qǐng)看大屏幕,哦,不,請(qǐng)往下看。
          let a = 5 // 0101 let b = 4 // 0100 // 按位異或運(yùn)算 a = a ^ b // 0101 ^ 0100 ===>
          0001,此時(shí)a的值為1 b = a ^ b // 0001 ^ 0100 ===> 0101,此時(shí)b的值為5 a = a ^ b // 0001 ^
          0101 ===> 0100,此時(shí)a的值為4 console.log(a) // 4 console.log(b) // 5
          驚不驚喜,意不意外。。。

          以上四種實(shí)現(xiàn)交換兩個(gè)變量值得方案你都掌握了嗎,如果掌握了,可以對(duì)面試官反手就是一個(gè)“吊打”了。
          如果你有更多的解決交換兩個(gè)變量值的方案,歡迎留言交流呀!

          后記

          以上就是胡哥今天給大家分享的內(nèi)容,喜歡的小伙伴記得點(diǎn)贊、收藏呦,關(guān)注胡哥有話說(shuō),學(xué)習(xí)前端不迷路,歡迎多多留言交流...

          胡哥有話說(shuō),一個(gè)有技術(shù),有情懷的胡哥!現(xiàn)任京東前端攻城獅一枚。
          胡哥有話說(shuō),專(zhuān)注于大前端技術(shù)領(lǐng)域,分享前端系統(tǒng)架構(gòu),框架實(shí)現(xiàn)原理,最新最高效的技術(shù)實(shí)踐!

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問(wèn)題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                亚洲一区成人波多野结衣在线观看 | 日本妞干网 | 日韩在线视频一区 | 欧美激情综合 | 最新草逼打炮 |