JavaScript交換兩個變量值的七種解決方案
前言
這篇文章總結(jié)了七種辦法來交換a和b的變量值
var a = 123; var b = 456;
交換變量值方案一
最最最簡單的辦法就是使用一個臨時變量了,不過使用臨時變量的方法實在是太low了
var t; t = a; a = b; b = t;
首先把a的值存儲到臨時變量中,然后b賦值給a,最后拿出臨時變量中的a值賦給b,這個辦法是最基本的了
交換變量值方案二
下面的方案都不會有臨時變量,我總結(jié)了一下,其實不使用臨時變量的思路都是讓其中一個變量變成一個a和b都有關(guān)系的值,這樣可以先改變另一個變量值, 最后改變原修改的變量值
比如這個
a += b; b = a - b; a -= b;
讓a先變成a與b的‘和'(也可以換成a和b的差,一樣的) ,‘和'減去b巧妙的得到了a的變量值賦予b ,再通過‘和'減去a的值得到了b的值賦予a,或者是下面的變式(差的形式)
a -= b; b = a + b; a = b - a;
但是感覺和的形式更容易理解
交換變量值方案三
這種方法對于第一次學習JavaScript的同學來說可能不了解,因為我們JavaScript很少會用到位操作,這是我在以前看算法競賽書的時候?qū)W來的,通過底層位運算來進行交換變量值,也是上面的方案演化來的
a ^= b; b ^= a; a ^= b;
了解一下吧,C++甚至可以a^=b^=a^=b
來完成任務(wù),但我發(fā)現(xiàn)JavaScript不可以
不過我們可以這樣
a = (b^=a^=b)^a;
交換變量值方案四
把a先變成了一個對象,這個對象保存著應(yīng)該交換后的鍵值對,最后賦值搞定
a = {a:b,b:a}; b = a.b; a = a.a;
交換變量值方案五
和上面的方法很像,只不過對象換成了數(shù)組
a = [a,b]; b = a[0]; a = a[1];
交換變量值方案六
這個辦法十分的巧妙,不是我想出來的,想出來的人一定是大神,除非他是托夢想出來的,簡單粗暴一行代碼交換了a和b的變量值
a = [b,b=a][0];
根據(jù)運算符優(yōu)先級,首先執(zhí)行b=a
,此時的b直接得到了a的變量值,然后一步數(shù)組索引讓a得到了b的值(簡直不能再厲害)
交換變量值方案七
最后我的方案是利用了ES6的解構(gòu)賦值語法,它允許我們提取數(shù)組和對象的值,對變量進行賦值,不過我現(xiàn)在測試用的chrome瀏覽器已經(jīng)實現(xiàn)了
[a,b] = [b,a];
可以看到解構(gòu)賦值語法讓我們的交換變量值變得超級簡單,這個解構(gòu)賦值語法要是講的話要講很多不是今天的重點,以后會在再總結(jié)現(xiàn)在就不講了
總結(jié)
本文提到了這么多交換變量值的方法,不知道還有沒有其他辦法,雖然它是一個無關(guān)緊要的問題,不過可以練一練我們的腦洞。希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
詳解TypeScript如何正確使用Declare關(guān)鍵字
如果您編寫 TypeScript 代碼的時間足夠長,您就已經(jīng)看到過declare關(guān)鍵字,但它有什么作用,為什么要使用它呢,下面小編就來和大家簡單講講2023-08-08layui button 按鈕彈出提示窗口,確定才進行的方法
今天小編就為大家分享一篇layui button 按鈕彈出提示窗口,確定才進行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09