JavaScript交換兩個(gè)變量值的七種解決方案
前言
這篇文章總結(jié)了七種辦法來(lái)交換a和b的變量值
var a = 123; var b = 456;
交換變量值方案一
最最最簡(jiǎn)單的辦法就是使用一個(gè)臨時(shí)變量了,不過(guò)使用臨時(shí)變量的方法實(shí)在是太low了
var t; t = a; a = b; b = t;
首先把a(bǔ)的值存儲(chǔ)到臨時(shí)變量中,然后b賦值給a,最后拿出臨時(shí)變量中的a值賦給b,這個(gè)辦法是最基本的了
交換變量值方案二
下面的方案都不會(huì)有臨時(shí)變量,我總結(jié)了一下,其實(shí)不使用臨時(shí)變量的思路都是讓其中一個(gè)變量變成一個(gè)a和b都有關(guān)系的值,這樣可以先改變另一個(gè)變量值, 最后改變?cè)薷牡淖兞恐?
比如這個(gè)
a += b; b = a - b; a -= b;
讓a先變成a與b的‘和'(也可以換成a和b的差,一樣的) ,‘和'減去b巧妙的得到了a的變量值賦予b ,再通過(guò)‘和'減去a的值得到了b的值賦予a,或者是下面的變式(差的形式)
a -= b; b = a + b; a = b - a;
但是感覺(jué)和的形式更容易理解
交換變量值方案三
這種方法對(duì)于第一次學(xué)習(xí)JavaScript的同學(xué)來(lái)說(shuō)可能不了解,因?yàn)槲覀僇avaScript很少會(huì)用到位操作,這是我在以前看算法競(jìng)賽書的時(shí)候?qū)W來(lái)的,通過(guò)底層位運(yùn)算來(lái)進(jìn)行交換變量值,也是上面的方案演化來(lái)的
a ^= b; b ^= a; a ^= b;
了解一下吧,C++甚至可以a^=b^=a^=b來(lái)完成任務(wù),但我發(fā)現(xiàn)JavaScript不可以
不過(guò)我們可以這樣
a = (b^=a^=b)^a;
交換變量值方案四
把a(bǔ)先變成了一個(gè)對(duì)象,這個(gè)對(duì)象保存著應(yīng)該交換后的鍵值對(duì),最后賦值搞定
a = {a:b,b:a};
b = a.b;
a = a.a;
交換變量值方案五
和上面的方法很像,只不過(guò)對(duì)象換成了數(shù)組
a = [a,b]; b = a[0]; a = a[1];
交換變量值方案六
這個(gè)辦法十分的巧妙,不是我想出來(lái)的,想出來(lái)的人一定是大神,除非他是托夢(mèng)想出來(lái)的,簡(jiǎn)單粗暴一行代碼交換了a和b的變量值
a = [b,b=a][0];
根據(jù)運(yùn)算符優(yōu)先級(jí),首先執(zhí)行b=a,此時(shí)的b直接得到了a的變量值,然后一步數(shù)組索引讓a得到了b的值(簡(jiǎn)直不能再厲害)
交換變量值方案七
最后我的方案是利用了ES6的解構(gòu)賦值語(yǔ)法,它允許我們提取數(shù)組和對(duì)象的值,對(duì)變量進(jìn)行賦值,不過(guò)我現(xiàn)在測(cè)試用的chrome瀏覽器已經(jīng)實(shí)現(xiàn)了
[a,b] = [b,a];
可以看到解構(gòu)賦值語(yǔ)法讓我們的交換變量值變得超級(jí)簡(jiǎn)單,這個(gè)解構(gòu)賦值語(yǔ)法要是講的話要講很多不是今天的重點(diǎn),以后會(huì)在再總結(jié)現(xiàn)在就不講了
總結(jié)
本文提到了這么多交換變量值的方法,不知道還有沒(méi)有其他辦法,雖然它是一個(gè)無(wú)關(guān)緊要的問(wèn)題,不過(guò)可以練一練我們的腦洞。希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
JS如何實(shí)現(xiàn)文本框隨文本的長(zhǎng)度而增長(zhǎng)
這篇文章主要介紹了JS如何實(shí)現(xiàn)文本框隨文本的長(zhǎng)度而增長(zhǎng)的方法,具有一定借鑒價(jià)值,需要的朋友可以參考下2015-07-07
微信小程序網(wǎng)絡(luò)請(qǐng)求封裝示例
這篇文章主要介紹了微信小程序網(wǎng)絡(luò)請(qǐng)求封裝示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
layui監(jiān)聽(tīng)工具欄的實(shí)例(操作列表按鈕)
今天小編就為大家分享一篇layui監(jiān)聽(tīng)工具欄的實(shí)例(操作列表按鈕),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
詳解JavaScript實(shí)現(xiàn)繼承的五種經(jīng)典方式(附圖解)
JavaScript中的繼承是一種機(jī)制,通過(guò)它可以創(chuàng)建一個(gè)對(duì)象,該對(duì)象可以享有另一個(gè)對(duì)象的屬性和方法,本文將詳細(xì)的為大家介紹實(shí)現(xiàn)繼承的五種經(jīng)典方式,感興趣的小伙伴跟著小編一起來(lái)看看吧2023-08-08
微信二次分享報(bào)錯(cuò)invalid signature問(wèn)題及解決方法
基于微信公眾號(hào)開發(fā)的h5頁(yè)面(使用jssdk接口),由用戶A分享給用戶B,用戶B再次分享這個(gè)頁(yè)面時(shí),不能成功分享。這篇文章主要介紹了微信二次分享報(bào)錯(cuò)invalid signature問(wèn)題及解決方法,需要的朋友可以參考下2019-04-04

