精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript 交換值的方法,你能想到幾種?

開發
早期之前,在 JS 中交換值,我們主要還是使用臨時變量。ES6 之后,我們可以使用展開運算符號來交換變量,除了這兩種方式,你還能想到哪些呢?

本文主要介紹 交換變量的 10 種方法,請過目

1. 使用臨時變量

  1. function swapWithTemp(num1, num2) { 
  2.   console.log(num1, num2) 
  3.   let temp = num1 
  4.   num1 = num2  num2 = temp  console.log(num1, num2) 
  5. }swapWithTemp(66.66, 8.88) 

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

  1. function swapWithPlusMinus(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = num1 + num2  num2 = num1 - num2  num1 = num1 - num2  console.log(num1, num2) 
  4. }swapWithPlusMinus(66, 8) 

主要的過程是這樣的,先求出兩個數的和,那么第二個數要換友第一個數的的值就是總的和減去第二個,也就是代碼中的 num2 = num1-num2,同理,第一個數要換成第二個數的值,就是總的和減去第一個數的值,現在第一個數已經是賦值給第二個數,所以直接減去第二數的值即可,也就是 num1 = num1-num2

但我試了一下小數,好像有點問題,有點尷尬 ,但這種思想我們還是要掌握的

上面還可以這樣來簡寫 :

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

這里的技巧在于 (num1 = num2) ,這步,我們讓 num1 等于 num2了,并且返回是num2 的值,此時 num1 值已交換。接著就用 num1 加上 (num1 = num2) 返回的值,也就是 num1 + num2 求和,然后思路就和上面分析的一樣了 。

但是,使用浮點數時,也會得到一些意外的結果

你可以在控制臺跑跑下面這段代碼:

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

3.僅使用+或-運算符
只要使用+運算符,就可以得到與同時使用+和-一樣的結果 。

  1. function swapWithPlus(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num2 = num1 + (num1=num2, 0) 
  4.   console.log(num1, num2) 
  5. }swapWithPlus(2.3,3.4) 

上面的程序可以工作,但犧牲了可讀性。在()中,我們將num1分配給num2,旁邊的0是返回值。簡而言之,第4行看起來是這樣的 ✍:

  1. num2 = num1 + 0 => num2 = num1 

4. 使用算術運算符*和/
*和/的原理與先前的方法相同,只是有一些微小的區別 。

  1. function swapWithMulDiv(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = num1*num2  num2 = num1/num2  num1 = num1/num2  console.log(num1, num2) 
  4. }swapWithMulDiv(2.3,3.4) 

與上一個相同。我們得到兩個數字的乘積并將它們存儲在其中一個變量中,對應就是num1 = num1*num2。然后,用總數除了對應的變量,得到交換后變量的值 。

但這個有些問題是什么呢?就是,如果有交換值有 0 就會得到意想不到的問題 :

  1. swapWithMulDiv(2.34,0) 
  2. // 2.34 0 
  3. // NaN NaN 

我們的值沒有交換,而是得到一個奇怪的NaN。那是怎么回事?如果你還記得你的數學課,我們總是被告知不要除以0因為它是未定義。原因在于極限是如何起作用的,還有一些其他的原因,我們不會涉及。現在,讓我們看看這個方法的其他問題:

  1. function swapWithMulDiv(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = num1*num2  num2 = num1/num2  num1 = num1/num2  console.log(num1, num2) 
  4. }swapWithMulDiv(2.34,Infinity) 
  5. // 2.34 Infinity 
  6. // NaN NaN 

又是NaN,因為我們不能用Infinity除以任務內容,因此未定義 ⚡。

如果是負無窮大呢,結果又會是怎么樣 :

  1. function swapWithMulDiv(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = num1*num2  num2 = num1/num2  num1 = num1/num2  console.log(num1, num2) 
  4. }swapWithMulDiv(2.34,-Infinity) 

-Infinity的結果與前面的示例相同,原因也是一樣的。

下面是上面的一個簡寫方式,當然存在問題也是一樣的:

  1. function swapWithMulDivShort(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = num1*num2  num2 = num1*(num1=num2)/num2  num1 = num1/num2  console.log(num1, num2) 
  4. }swapWithMulDivShort(2.3,3.4) 

5. 僅使用*或/運算符
上面的程序可以工作,但犧牲了可讀性。在()中,我們將num1分配給num2,旁邊的1``是返回值。num2 = num1 * (num1=num2, 1)看起來是這樣的:

  1. num2 = num1 * 1 => num2 = num1 

6. 使用按位異或
異或是按二進制位來工作,當我們有兩個值不一樣時,它的結果為1,否則為0:

  1. function swapWithXOR(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = num1^num2;  num2 = num1^num2;   num1 = num1^num2;  console.log(num1, num2) 
  4. }swapWithXOR(10,1) 

4位二進制數10-> 1010

4位二進制數1-> 0001

上面的分解過程 :

  1. num1 = num1 ^ num2 = 1010 ^ 0001 = 1011 
  2. num2 = num1 ^ num2 = 1011 ^ 0001 => 1010 => 10 
  3. num1 = num1 ^ num2 = 1011 ^ 1010 => 0001 => 1 

JavaScript語言精髓與編程實踐(第3版)

我們來看另一個例子。

  1. function swapWithXOR(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = num1^num2;  num2 = num1^num2;   num1 = num1^num2;  console.log(num1, num2) 
  4. }swapWithXOR(2.34,3.45) 
  5. // 2.34 3.45 
  6. // 3 2 

嗯?交換的值在哪里?我們只得到這個數的整數部分。這就是問題所在。異或假設輸入是整數,因此執行相應的計算。但是浮點數不是整數,并且由IEEE 754標準來表示,該標準將數字分為三部分:一個符號位、一組表示指數的位以及另一組表示1(包括)到2(不包括)之間的數字尾數,因此我們得到了不正確的值。

另一個例子:

  1. function swapWithXOR(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = num1^num2;  num2 = num1^num2;   num1 = num1^num2;  console.log(num1, num2) 
  4. }swapWithXOR(-Infinity,Infinity) 
  5. // -Infinity Infinity 
  6. // 0 0 

再一次,我們沒有看到預期的結果 。這是因為Infinity和–Infinity都是浮點數。正如我們上面討論的,對于XOR,浮點數是一個問題。

使用同或門 XNOR。
同或門也稱為異或非門,它也可以操作二進制位,與XOR相反。當我們有兩個值不一樣時,XNOR 結果是0,否則為1。JavaScript 沒有一個操作符來執行XNOR,所以我們使用非與XOR操作符來達到類似的效果。

  1. function swapWithXNOR(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = ~(num1^num2)  num2 = ~(num1^num2)  num1 = ~(num1^num2)  console.log(num1, num2) 
  4. }swapWithXNOR(10,1) 

4位二進制數10-> 1010

4位二進制數1-> 0001

上面的分解過程 :

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

由于我們有一個負數,我們需要將其轉換回二進制并執行2的補碼以獲取十進制值,例如:

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

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

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

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

  1. function swapWithXNOR(num1, num2){ 
  2.   console.log(num1, num2) 
  3.   num1 = ~(num1^num2)  num2 = ~(num1^num2)  num1 = ~(num1^num2)  console.log(num1, num2) 
  4. }swapWithXNOR(2.3,4.5) 
  5. // 2.3 4.5 
  6. // 4 2 

8. 在數組中賦值
這是一個簡單的技巧,只需要一行來執行交換,更重要的是不需要數學知識,只需要一個基本的數組知識即可。

  1. function swapWithArray(num1, num2){ 
  2.   console.log(num1, num2)  num2 = [num1, num1 = num2][0] 
  3.   console.log(num1, num2)}swapWithArray(2.3,Infinity)// 2.3 Infinity// Infinity 2.3 

在數組的索引0中,我們存儲num1,在索引1中,我們既將num2分配給num1,又存儲了num2。 另外,訪問[0],將數組中的num1值存儲在num2中。

這種方式可以交換我們想要的任何東西,包括整數,浮點數(包括無窮大)以及字符串,它很整潔,但清晰度不夠。

9. 使用解構表達式
這是ES6的一個特性,也是最簡單的,我們可以像這樣交換值 :

  1. let num1 = 23.45 
  2. let num2 = 45.67 
  3. console.log(num1,num2) 
  4. [num1,num2] = [num2,num1]console.log(num1,num2) 

10. 使用立即調用的函數表達式(IIFE)
IIFE指的是在定義后立即執行的函數。

  1. function swapWithIIFE(num1,num2){ 
  2.   console.log(num1,num2) 
  3.   num1 = (function (num2){ return num2; })(num2, num2=num1) 
  4.   console.log(num1,num2) 
  5. }swapWithIIFE(2.3,3.4) 

在上面的示例中,我們立即調用第4行上的一個函數。最后的括號是函數的參數。第二個參數將num1分配給num2,第一個參數num1被返回。因此,交換了這些值,請記住,這種交換方法效率不高。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2020-09-18 06:42:21

JavaScript交換值交換變量

2023-01-13 14:29:00

ESMySQL數據

2021-08-26 10:07:25

數組前端元素

2010-06-03 08:55:43

LINQ

2020-10-13 06:56:19

JavaScript異常類型開發

2020-08-24 08:05:47

JavaScriptJavaScript 頁面

2018-10-26 13:57:32

交換機故障排障

2020-10-16 18:35:53

JavaScript字符串正則表達式

2024-08-01 09:58:33

API性能機制

2020-11-16 09:15:07

MYSQL

2009-08-25 09:22:01

DataGridVie

2018-02-08 09:04:58

Nginx404頁面方法

2021-05-07 16:19:36

異步編程Java線程

2010-04-01 18:22:36

無線交換機故障

2021-11-05 21:36:59

JavaScript語言開發

2023-09-04 08:28:34

JavaScripforEach 循環

2009-09-04 11:20:47

ASP.NET頁面間值

2009-12-07 18:20:35

2022-09-06 11:01:11

交換變量前端

2020-12-31 06:12:38

Siri Windows電腦
點贊
收藏

51CTO技術棧公眾號

欧美成人蜜桃| 久久综合久久八八| 久草在在线视频| 91xxx在线观看| 国产精品自拍一区| 91国产中文字幕| 亚洲 小说 欧美 激情 另类| 91另类视频| 国产精品久久免费看| 999在线免费观看视频| 黄色一级片免费看| 日韩在线精品| 欧美成人乱码一区二区三区| 一女被多男玩喷潮视频| 日本中文字幕视频在线| 99在线热播精品免费| 国产精品无av码在线观看| 登山的目的在线| 一区二区小说| 精品国产区一区| 久久婷婷综合色| a√中文在线观看| 亚洲欧洲av在线| 欧美精品亚洲精品| 六月婷婷综合网| 免费美女久久99| 17婷婷久久www| 欧美黄色免费观看| 久久精品国产亚洲夜色av网站| 亚洲第一精品夜夜躁人人爽| 一个色综合久久| 大胆人体一区二区| 五月天视频一区| 成人午夜视频免费观看| av在线免费观看网| 久久久国产精品午夜一区ai换脸| 成人91免费视频| 国产女人18毛片水真多| 蜜乳av一区二区| 国产成人精品电影久久久| 五月天婷婷综合网| 99国产精品视频免费观看一公开| 欧美乱大交xxxxx| 国产三级aaa| 日韩dvd碟片| 一本色道久久88精品综合| 亚洲精品理论片| 老司机在线精品视频| 日韩免费一区二区三区在线播放| 一区二区在线免费看| 日韩高清不卡| 欧美亚男人的天堂| 中文字幕视频在线免费观看| 巨茎人妖videos另类| 福利精品视频在线| 97超碰青青草| 毛片无码国产| 在线观看视频一区| 一级在线免费视频| 欧美激情福利| 欧美一区二区三区婷婷月色 | 日本亚洲欧美天堂免费| 国产91久久婷婷一区二区| 不卡av电影在线| 日本成人在线电影网| 国产精品黄视频| 在线观看毛片av| 国产一区不卡在线| 国产日韩欧美精品| 青春有你2免费观看完整版在线播放高清| 成人av网址在线| 麻豆传媒一区二区| 国产小视频在线观看| 中文av一区特黄| 日韩不卡一二区| av第一福利在线导航| 精品久久久久久久中文字幕| wwwxxx黄色片| 全球中文成人在线| 日韩欧美激情四射| 91av在线免费| 精品99久久| 久久视频在线免费观看| 精品视频久久久久| 久久亚洲风情| 91最新在线免费观看| 老熟妇高潮一区二区高清视频| 91在线视频在线| 亚洲欧美国产精品桃花| 亚洲妇熟xxxx妇色黄| 精品日韩美女的视频高清| 男女啪啪网站视频| 亚州一区二区| 亚洲欧美一区二区精品久久久| 国产精品酒店视频| 亚洲天堂男人| 日韩av片永久免费网站| 国产人妖一区二区三区| 91免费视频观看| 在线观看视频黄色| 亚洲男人av| 俺去了亚洲欧美日韩| 国产日韩欧美在线一区| 久久久久久国产精品mv| h视频网站在线观看| 亚洲精选免费视频| 欧美一级黄色片视频| www.久久爱.com| 日韩高清人体午夜| 亚洲二区在线播放| 亚洲综合欧美| 91久久久在线| 成人不用播放器| 性久久久久久久久| 小早川怜子一区二区三区| 日韩丝袜视频| 欧美日韩成人在线播放| 波多野结衣视频在线观看| 高清不卡在线观看| 一区二区三区我不卡| 中文在线资源| 精品国产乱码久久久久久蜜臀| 青青青视频在线播放| 99热免费精品在线观看| 亚洲free性xxxx护士白浆| 国产综合在线观看| 婷婷亚洲久悠悠色悠在线播放| 婷婷激情5月天| 国产99久久| 欧美一级大片在线观看| 亚洲av永久纯肉无码精品动漫| 中文幕一区二区三区久久蜜桃| 青青艹视频在线| 在线精品视频一区| 美女精品视频一区| 在线观看国产小视频| 国产欧美综合在线观看第十页| 成年人深夜视频| 国产专区精品| 久久成人免费视频| 国产精品高潮呻吟av| 欧美高清在线一区| 黄色aaa级片| 国产一区二区精品久| 555www成人网| 欧美日韩激情视频一区二区三区| 婷婷中文字幕一区三区| 在线精品一区二区三区| 亚洲福利国产| 国产精品永久入口久久久| 在线观看的网站你懂的| 欧美一级免费大片| 精品视频久久久久| youjizz久久| 成年人网站免费视频| 成人性生交大片免费看中文视频| 欧美大片欧美激情性色a∨久久| 国产熟女一区二区丰满| 亚洲女女做受ⅹxx高潮| 国产资源中文字幕| 欧美日韩国产一区精品一区| 99re在线观看| 色综合桃花网| 国产一区二区三区欧美| 亚洲中文字幕在线一区| 《视频一区视频二区| 国产999免费视频| 欧美日韩网站| 激情小说综合区| 一区二区电影免费观看| 中国日韩欧美久久久久久久久| 成人黄色免费网| 1区2区3区精品视频| 丰满少妇一区二区三区专区| 亚洲高清网站| 久久精品五月婷婷| 福利一区二区| 九九热视频这里只有精品| 欧美一级特黄aaaaaa| 一本大道久久a久久精品综合| 国产精品20p| 韩国一区二区视频| 僵尸世界大战2 在线播放| 日韩大胆成人| 国产免费一区二区三区香蕉精| 1024在线播放| 国产手机视频精品| 亚洲一级视频在线观看| 亚洲综合视频在线观看| 少妇久久久久久久久久| 国产在线播放一区| 亚洲国产精品久久久久爰色欲| 97国产精品| 精品一区在线播放| 97精品资源在线观看| 91av在线播放视频| 日本三级在线视频| 亚洲国产精品免费| 91禁在线观看| 天天综合色天天| 黄色录像一级片| 91伊人久久大香线蕉| 911福利视频| 亚洲免费在线| 成人午夜视频免费观看| 成人黄色小视频| 国产美女精品在线观看| 欧美大片网站| 538国产精品一区二区免费视频| 黄色网址在线免费| 亚洲视频视频在线| 亚洲狼人综合网| 欧美精品三级在线观看| 黄色免费av网站| 亚洲一区二区三区在线| 男女全黄做爰文章| 久久午夜免费电影| 久久久久亚洲AV成人网人人小说| 美女网站色91| 国产精品免费观看久久| 尤物在线精品| 成人在线免费高清视频| 日韩激情免费| 日本一区网站| 一区二区三区日本久久久 | 亚洲成年人专区| 国产成人黄色| 久久久一本精品99久久精品66| 亚洲超碰在线观看| 亚洲一区二区免费| 天天综合在线观看| 国产精品久久婷婷六月丁香| 伊人色综合一区二区三区影院视频| 久久久久久久久久国产精品| 好吊日视频在线观看| 综合欧美国产视频二区| 男人天堂资源在线| 国产视频综合在线| 你懂的视频在线免费| 日韩电影在线观看中文字幕| 蜜臀久久99精品久久久| 欧美不卡一区二区三区四区| 国产巨乳在线观看| 91精品久久久久久久99蜜桃 | 黄色在线观看视频网站| 欧美精品免费在线| 羞羞网站在线看| 欧美多人爱爱视频网站| 青春草在线视频| 久久久久久91| 高清精品在线| 欧美亚洲在线视频| 国产另类xxxxhd高清| 国产成人拍精品视频午夜网站| 丁香六月综合| 国产精品成久久久久三级| 日本美女久久| 成人国产在线激情| 精品一区91| 风间由美一区二区三区| 加勒比视频一区| 久久青青草原| 欧美亚洲国产一区| 在线视频精品一区| 欧美午夜免费影院| 亚洲 高清 成人 动漫| 视频在线在亚洲| 一女二男3p波多野结衣| 国产精品资源网| 深田咏美中文字幕| 久久综合久久综合亚洲| 谁有免费的黄色网址| 国产精品乱码久久久久久 | 精品欧美一区二区三区| 精品一区二区无码| 91精品福利在线一区二区三区| 性做久久久久久久| 亚洲奶大毛多的老太婆| 尤物网址在线观看| 欧美激情在线观看| 日韩欧美少妇| 97人人模人人爽人人喊38tv| 欧美a一欧美| 亚洲午夜激情| 伊人久久亚洲影院| 日韩av片网站| 国产**成人网毛片九色 | 免费av网站在线播放| 一区二区欧美日韩视频| 午夜影院免费在线| 国产精品久久二区| 爱高潮www亚洲精品| 欧美中日韩免费视频| 你懂的亚洲视频| 免费av网址在线| 国产成人免费视频网站高清观看视频| 人妻无码中文久久久久专区| 国产精品五月天| 日韩精品一区二区av| 欧美三级日韩三级| 天堂中文在线观看视频| 日韩一区av在线| 亚洲精华液一区二区三区| 成人午夜在线影院| 中文有码一区| www.射射射| 国产一区二区三区蝌蚪| 国产精品suv一区| 在线亚洲高清视频| 国产av无码专区亚洲av| 亚洲美女在线看| 在线视频观看国产| 国产精品久久久久久久久久久久久久 | 男女高潮又爽又黄又无遮挡| 精品一区二区三区视频在线观看| 天天插天天射天天干| 自拍视频在线观看一区二区| 亚洲精品中文字幕乱码三区91| 日韩亚洲欧美中文三级| 国产视频网站在线| 91av国产在线| 福利片一区二区| 强开小嫩苞一区二区三区网站| 日韩电影免费一区| 在线 丝袜 欧美 日韩 制服| 亚洲另类在线视频| 国产精品久久久久毛片| 伊人久久免费视频| 澳门成人av网| 久久国产一区二区| 在线视频观看日韩| 四虎成人免费视频| 一区二区三区国产豹纹内裤在线| 一级片视频网站| 中文字幕亚洲欧美一区二区三区| 91精品论坛| 欧美动漫一区二区| 午夜亚洲性色福利视频| 一区二区三区免费在线观看视频| 亚洲一区二区三区四区的| 国产高清第一页| 久热国产精品视频| 欧美91在线|欧美| 一本久道久久综合狠狠爱亚洲精品 | 色妞久久福利网| 国产精品美女午夜爽爽| 日韩资源av在线| 三级成人在线视频| 成人在线观看免费高清| 欧美写真视频网站| 在线免费黄色| 成人欧美一区二区三区在线湿哒哒 | 国产一区二区在线免费观看| 午夜成人亚洲理伦片在线观看| 欧美美女一区二区在线观看| 青青影院在线观看| 亚洲精品免费在线视频| 欧美另类女人| 人妻av一区二区| 黑人巨大精品欧美一区免费视频| 四虎精品在永久在线观看 | 日本妇乱大交xxxxx| 在线日韩第一页| 国产精品国产三级在线观看| 色哺乳xxxxhd奶水米仓惠香| 国产a级毛片一区| 男女啊啊啊视频| 一区二区av在线| 国产亚洲观看| 日韩av新片网| 久久久久成人黄色影片| 97国产成人无码精品久久久| 久久综合久久88| 青草久久视频| 少妇一级淫免费放| 一区av在线播放| 色哟哟在线观看| 国产精品自拍偷拍视频| 欧美精品一卡| 受虐m奴xxx在线观看| 欧美日韩国产成人在线91| 在线观看电影av| 欧美日韩日本网| 国产美女主播视频一区| 欧美亚洲精品天堂| 日韩在线观看av| 久久大胆人体视频| 成人性生交免费看| 亚洲不卡av一区二区三区| 成年在线电影| 国产精品久久精品国产| 日韩av中文字幕一区二区三区 | 亚洲高清免费一级二级三级| 黄色的视频在线免费观看| 亚洲一区二区三区香蕉| 久久国产一二区| 免费在线观看黄色av| 尤物九九久久国产精品的分类| 日韩成人在线看| 亚洲三级视频网站|