欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript交換兩個(gè)變量值的七種解決方案

 更新時(shí)間:2016年12月01日 08:39:46   投稿:daisy  
最近在寫(xiě)位操作的時(shí)候突然想到了這個(gè)問(wèn)題,突然想總結(jié)一下,交換變量值的問(wèn)題可能使我們學(xué)習(xí)編程語(yǔ)言接觸到的比較早的邏輯問(wèn)題,小伙伴或多或少會(huì)兩種解決的方法,本文提供了七種解決的方法,下面跟著小編來(lái)一起看看吧。

前言

這篇文章總結(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ū)的時(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)文章

  • 詳解TypeScript如何正確使用Declare關(guān)鍵字

    詳解TypeScript如何正確使用Declare關(guān)鍵字

    如果您編寫(xiě) TypeScript 代碼的時(shí)間足夠長(zhǎng),您就已經(jīng)看到過(guò)declare關(guān)鍵字,但它有什么作用,為什么要使用它呢,下面小編就來(lái)和大家簡(jiǎn)單講講
    2023-08-08
  • JS?加載性能Tree?Shaking優(yōu)化詳解

    JS?加載性能Tree?Shaking優(yōu)化詳解

    這篇文章主要為大家介紹了JS?加載性能Tree?Shaking優(yōu)化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • layui button 按鈕彈出提示窗口,確定才進(jìn)行的方法

    layui button 按鈕彈出提示窗口,確定才進(jìn)行的方法

    今天小編就為大家分享一篇layui button 按鈕彈出提示窗口,確定才進(jìn)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • js URL參數(shù)的拼接方法比較

    js URL參數(shù)的拼接方法比較

    請(qǐng)求的URL后面帶參數(shù)在項(xiàng)目中是很常見(jiàn)的,常用在的地方比如跳轉(zhuǎn)到新頁(yè)面或者請(qǐng)求CGI等
    2012-02-02
  • 基于Cesium實(shí)現(xiàn)拖拽3D模型的示例代碼

    基于Cesium實(shí)現(xiàn)拖拽3D模型的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Cesium實(shí)現(xiàn)在地圖上添加一個(gè)3D模型,并且可以實(shí)現(xiàn)拖拽效果。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-06-06
  • 給js文件傳參數(shù)(詳解)

    給js文件傳參數(shù)(詳解)

    這篇文章主要介紹了給js文件傳參數(shù)的方法,需要的朋友可以參考下
    2014-07-07
  • IE FF OPERA都可用的彈出層實(shí)現(xiàn)代碼

    IE FF OPERA都可用的彈出層實(shí)現(xiàn)代碼

    多瀏覽器的彈出層效果核心代碼。需要的朋友可以測(cè)試下這個(gè)是從正在使用的網(wǎng)站中扒下來(lái)的。
    2009-09-09
  • js下拉菜單生成器dropMenu使用方法詳解

    js下拉菜單生成器dropMenu使用方法詳解

    這篇文章主要介紹了js下拉菜單生成器dropMenu的使用方法 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 九個(gè)超級(jí)好用的Javascript技巧

    九個(gè)超級(jí)好用的Javascript技巧

    在實(shí)際的開(kāi)發(fā)工作過(guò)程中,積累了一些常見(jiàn)又超級(jí)好用的 Javascript 技巧和代碼片段,包括整理的其他大神的 JS 使用技巧,今天篩選了 9 個(gè),以供大家參考
    2023-04-04
  • JavaScript撤銷(xiāo)恢復(fù)操作的實(shí)現(xiàn)方法詳解

    JavaScript撤銷(xiāo)恢復(fù)操作的實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了JavaScript撤銷(xiāo)恢復(fù)操作的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02

最新評(píng)論