1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯(lián)網營銷解決方案
      JS中交換值的方法有哪些-創(chuàng)新互聯(lián)

      小編給大家分享一下JS中交換值的方法有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

      目前創(chuàng)新互聯(lián)已為近千家的企業(yè)提供了網站建設、域名、虛擬主機、網站改版維護、企業(yè)網站設計、昂仁網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

      在開發(fā)過程中又是我們需要對值進行交換。一般我們都在用一種簡單的解決方案:“臨時變量”。不過還有更好的辦法,而且不只有一個,有很多。有時我們在網上搜尋解決方案,找到后復制粘貼,但是從沒想過這小段代碼是怎樣工作的。現在我們該學習一下應該怎樣輕松高效地交換值了。

      1、使用臨時變量

      先是最簡單的一種。

      function swapWithTemp(num1,num2){
        console.log(num1,num2)
      
        var temp = num1;
        num1 = num2;
        num2 = temp;
      
        console.log(num1,num2)
      }
      
      swapWithTemp(2.34,3.45)

      2、使用算術運算符 + 和 -

      還可以用一些數學魔術來交換值。

      function swapWithPlusMinus(num1,num2){
        console.log(num1,num2)
      
        num1 = num1+num2;
        num2 = num1-num2;
        num1 = num1-num2;
      
        console.log(num1,num2)
      }
      
      swapWithPlusMinus(2.34,3.45)

      讓我們來看看它是如何工作的。我們在第 4 行獲得兩個數字的總和。現在,如果從和中減去一個數字,那么另一個數字就正確了。這就是第 5 行所做的工作。從存儲在num1 變量中的總和中減去num2 會得到存儲在num2 中的原始num1 值。同樣,在第 6 行的num1 中得到num2 的值。

      小心:還有一個與+- 互換的單行代碼方案,不過。。。

      它是這樣的:

      function swapWithPlusMinusShort(num1,num2){
        console.log(num1,num2)
      
        num2 = num1+(num1=num2)-num2;
      
        console.log(num1,num2)
      }
      
      swapWithPlusMinusShort(2,3)

      上面的代碼給出了預期的結果。() 中的表達式將num2 存儲在num1 中,然后減去num1 - num2,除了減去num2 - num2 = 0 之外什么也沒有做,因此得到了結果。但是當使用浮點數時,會看到一些意外的結果。

      試著執(zhí)行下面的代碼并查看結果:

      function swapWithPlusMinusShort(num1,num2){
        console.log(num1,num2)
      
        num2 = num1+(num1=num2)-num2;
      
        console.log(num1,num2)
      }
      
      swapWithPlusMinusShort(2,3.1)

      3、僅使用 + 或 - 運算符

      僅通過使用+ 運算符就可以達到同時使用+- 相同的結果。

      看下面的代碼:

      function swapWithPlus(num1,num2){
        console.log(num1,num2)
      
        num2 = num1 + (num1=num2, 0)
      
        console.log(num1,num2)
      }
      
      //Try with - operator
      swapWithPlus(2.3,3.4)

      上面的代碼是有效的,但犧牲了可讀性。在第 4 行的() 中,我們將num1 賦值給num2,而旁邊的0 是返回值。簡而言之,第 4 行的運算邏輯如下所示:

      num2 = num1 + 0 
      => num2 = num1.

      所以得到了正確結果。

      注意:一些 JavaScript 引擎可能會對上面的代碼進行優(yōu)化,從而忽略+ 0

      4、使用算術運算符 * 和 /

      讓我們用*/ 運算符玩更多的花樣。

      其原理與先前的方法相同,但是有一些小問題。

      function swapWithMulDiv(num1,num2){
        console.log(num1,num2)
      
        num1 = num1*num2;
        num2 = num1/num2;
        num1 = num1/num2;
      
        console.log(num1,num2)
      }
      
      swapWithMulDiv(2.34,3.45)

      與上一個方法相同。首先得到兩個數字的乘積,并將它們存儲在num1 中。然后在第 5 行,把num2 與這個結果相除,得到第一個數字,然后重復此過程以獲得第二個數字。

      現在你成“數學家” 了。

      不過那小問題在哪兒呢?

      讓我們來嘗試一下:

      function swapWithMulDiv(num1,num2){
        console.log(num1,num2)
      
        num1 = num1*num2;
        num2 = num1/num2;
        num1 = num1/num2;
      
        console.log(num1,num2)
      }
      
      //試著改變數字的值,看看會發(fā)生什么
      swapWithMulDiv(2.34,0)

      我們的值沒有交換,而是得到了一個奇怪的NaN,這是怎么回事。如果你還記得小學的數學課,就會想起不要除以 0,因為那是沒有意義的。

      然后再看看這種方法的其他問題,看下面的代碼:

      function swapWithMulDiv(num1,num2){
        console.log(num1,num2)
      
        num1 = num1*num2;
        num2 = num1/num2;
        num1 = num1/num2;
      
        console.log(num1,num2)
      }
      //看看會發(fā)生什么
      swapWithMulDiv(2.34,Infinity)

      沒錯,又是NaN。因為你無法使用Infinity 去除任何值,它是未定義的。

      但我還想再試試:

      function swapWithMulDiv(num1,num2){
        console.log(num1,num2)
      
        num1 = num1*num2;
        num2 = num1/num2;
        num1 = num1/num2;
      
        console.log(num1,num2)
      }
      
      //會怎樣呢
      swapWithMulDiv(2.34,-Infinity)

      -Infinity 的結果與前面的代碼相同,原因也一樣。

      事實證明,即使你是一位出色的“數學家”,也有無能為力的時候。

      下面是用*/ 進行值交換的較短版本,仍存在相同的問題:

      function swapWithMulDivShort(num1,num2){
        console.log(num1,num2)
      
        num2 = num1*(num1=num2)/num2;
      
        console.log(num1,num2)
      }
      
      swapWithMulDivShort(2.3,3.4)

      上面的代碼類似于用+- 進行交換時的較短的代碼。把num2 賦值給num1,然后第 4 行的演算邏輯是這樣:

      num2 = num1 * num2 / num2
          => num2 = num1

      這樣兩個值就互換了。

      5、僅使用 * 或 / 運算符

      function swapWithMul(num1,num2){
        console.log(num1,num2)
      
        num2 = num1 * (num1=num2, 1)
      
        console.log(num1,num2)
      }
      
      //Try with / and ** operator
      swapWithMul(2.3,3.4)

      上面的程序是有效的,但犧牲了可讀性。在第 4 行的  () 中,我們將num1 賦值給num2,旁邊的1 是返回值。簡而言之,第 4 行的邏輯如下所示:

      num2 = num1 * 1 
          => num2 = num1

      這樣就得到了結果。

      6、使用按位異或(XOR)。

      XOR 用來進行二進制位運算。當有兩個不同的輸入時,它的結果為 1,否則為 0。

      XYX^Y
      110
      101
      011
      000

      先了解其工作原理!

      function swapWithXOR(num1,num2){
        console.log(num1,num2)
      
        num1 = num1^num2;
        num2 = num1^num2; 
        num1 = num1^num2;
      
        console.log(num1,num2)
      }
      // 試試負值會怎樣
      swapWithXOR(10,1)

      10 的4 位二進制數 -> 1010

      1 的 4 位二進制數 -> 0001

      現在:

      第四行: 
      num1 = num1 ^ num2 
          => 1010 ^ 0001 
          => 1011 
          => 7 
      第五行: 
      num2 = num1 ^ num2 
          => 1011 ^ 0001 
          => 1010 
          => 10
      第六行: 
      num1 = num1 ^ num2 
          => 1011 ^ 1010 
          => 0001 
          => 1

      兩個值交換了。

      再來看另一個例子:

      function swapWithXOR(num1,num2){
        console.log(num1,num2)
      
        num1 = num1^num2;
        num2 = num1^num2;
        num1 = num1^num2;
      
        console.log(num1,num2)
      }
      
      swapWithXOR(2.34,3.45)

      嗯??交換的值在哪兒?我們只是得到了數字的整數部分,這就是問題所在。 XOR 假定輸入是整數,所以···相應地執(zhí)行計算。但是浮點數不是整數,而是由 IEEE 754 標準表示的,將數字分為三部分:符號位、代表指數的一組位和代表尾數的一組位。位數是介于1(含)和2(不含)之間的數字。所以得到的值不正確。

      另一個例子:

      function swapWithXOR(num1,num2){
        console.log(num1,num2)
      
        num1 = num1^num2;
        num2 = num1^num2;
        num1 = num1^num2;
      
        console.log(num1,num2)
      }
      // 試試 infinities 和整數值.
      swapWithXOR(-Infinity,Infinity)

      毫無意外,我們沒有得到預期的結果。這是因為Infinity– Infinity 都是浮點數。正如我們在前面所討論的,對于 XOR,浮點數是一個問題。

      7、使用按位同或 (XNOR)

      它用來進行二進制位運算,但是與 XOR 正好相反。當有兩個不同的輸入時,XNOR 的結果是 0,否則結果為 1。 JavaScript 沒有執(zhí)行 XNOR 的運算符,所以要用NOT 運算符對 XOR 的結果求反。

      XYXNOR
      111
      100
      010
      001

      先了解其工作原理:

      function swapWithXNOR(num1,num2){
        console.log(num1,num2)
      
        num1 = ~(num1^num2);
        num2 = ~(num1^num2);
        num1 = ~(num1^num2);
      
        console.log(num1,num2)
      }
      
      //可以試試負值
      swapWithXNOR(10,1)

      10 的 4 位二進制數 -> 1010

      1 的 4 位二進制數 -> 0001

      第 4 行:

      num1 = ~(num1 ^ num2) 
          => ~(1010 ^ 0001) 
          =>~(1011) 
          => ~11 
          => -12

      由于這是一個負數,所以需要將其轉換回二進制并計算 2 的補碼來獲取十進制值,例如:

      -12 => 1100 
          => 0011 + 1 
          => 0100

      第 5 行:

      num2 = ~(num1 ^ num2) 
          => ~(0100 ^ 0001) 
          => ~(0101) 
          => ~5 
          => -6-6 
          => 0110 
          => 1001 + 1
          => 1010 
          => 10

      第 6 行:

      num1 = ~(num1 ^ num2) 
          => ~(0100^ 1010) 
          => ~(1110) 
          => ~14 
          => -15-15 
          => 1111 
          => 0000 + 1 
          => 0001 
          => 1

      花了一些時間,但還是交換了值。但不幸的是,它遇到了與 XOR 相同的問題,不能處理浮點數和無窮大。

      試試下面的值:

      function swapWithXNOR(num1,num2){
        console.log(num1,num2)
      
        num1 = ~(num1^num2);
        num2 = ~(num1^num2);
        num1 = ~(num1^num2);
      
        console.log(num1,num2)
      }
      
      swapWithXNOR(2.3,4.5)

      8、在數組中進行賦值

      這是一線技巧。只需要一行代碼就可以進行交換,更重要的是,無需數學運算,只需要數組的基本知識。不過它看上去可能很奇怪。

      先讓看看它的實際效果:

      function swapWithArray(num1,num2){
        console.log(num1,num2)
      
        num2 = [num1, num1 = num2][0];
      
        console.log(num1,num2)
      }
      
      swapWithArray(2.3,Infinity)

      在數組的下標 0 位置中存儲num1,在下標 1 中,既將num2 分配給num1,又存儲了num2。另外,我們只是訪問[0],將數組中的num1 值存儲在num2 中。而且可以在這里交換我們想要的任何東西,比如:整數、浮點數(包括無窮數)以及字符串。看上去很整潔,但是在這里失去了代碼的清晰度。

      9、使用解構表達式

      這是 ES6 的功能。這是所有方法中最簡單的。只需要一行代碼就可以完成交換:

      let num1 = 23.45;
      let num2 = 45.67;
      
      console.log(num1,num2);
      
      [num1,num2] = [num2,num1];
      
      console.log(num1,num2);

      10、使用立即調用的函數表達式(IIFE)

      這是最奇怪的一個。簡單的說 IIFE 是在在定義后立即執(zhí)行的函數。

      可以用它來交換兩個值:

      function swapWithIIFE(num1,num2){
        console.log(num1,num2)
      
        num1 = (function (num2){ return num2; })(num2, num2=num1)
      
        console.log(num1,num2)
      }
      
      swapWithIIFE(2.3,3.4)

      在上面的例子中,在第4行立即調用一個函數。最后的括號是該函數的參數。第二個參數將num1 賦值給num2,僅僅返回第一個參數,不過這種交換方法效率不高。

      看完了這篇文章,相信你對“JS中交換值的方法有哪些”有了一定的了解,如果想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


      分享標題:JS中交換值的方法有哪些-創(chuàng)新互聯(lián)
      本文路徑:http://ef60e0e.cn/article/ddoipo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        汉沽区| 商城县| 陇川县| 无为县| 汽车| 栾城县| 封开县| 海口市| 轮台县| 江阴市| 龙胜| 元江| 延川县| 临高县| 孟村| 上思县| 天峨县| 伊金霍洛旗| 托克逊县| 福建省| 达日县| 伊金霍洛旗| 通道| 荣成市| 东阿县| 长宁区| 读书| 团风县| 九江市| 滕州市| 鹰潭市| 平遥县| 璧山县| 壶关县| 郎溪县| 沙河市| 凉山| 盐亭县| 铁力市| 萨迦县| 瑞安市|