在咱們學習編程之初,就學習過變量的賦值操做,同時也學習了將一個變量的值賦值給另一個變量。對於交換兩個變量的值,不少童鞋都有解決方案。然鵝,對於面試官提出的不借助第三變量來交換兩個變量的值,你能想到幾種解決方案呢?前端
若是你只知道一種方案,請你認真看下去...
若是你知道兩種方案,那麼你能夠來了解更多方案了...
讓咱們由淺入深,來了解交換變量值的最簡單、最初的解決方案:藉助於第三個變量面試
// 聲明變量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
驚不驚喜,意不意外。。。
以上四種實現交換兩個變量值得方案你都掌握了嗎,若是掌握了,能夠對面試官反手就是一個「吊打」了。
若是你有更多的解決交換兩個變量值的方案,歡迎留言交流呀!數學
以上就是胡哥今天給你們分享的內容,喜歡的小夥伴記得點贊
、收藏
呦,關注胡哥有話說,學習前端不迷路,歡迎多多留言交流...系統架構
胡哥有話說,專一於大前端技術領域,分享前端系統架構,框架實現原理,最新最高效的技術實踐!