自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

七種交換變量值的方法,看看你知道幾種

開發(fā) 前端
你知道交換兩個(gè)變量的值有多少種方法?我很慚愧,因?yàn)槲抑恢纼煞N方法。事實(shí)上,至少有 7 種方法可以做到這一點(diǎn),是不是有點(diǎn)太不可思議了?什么,你不相信我?我不會(huì)騙你的,跟我來!

1.使用臨時(shí)變量交換兩個(gè)值

這是每個(gè)前端開發(fā)工程師都應(yīng)該知道的一種方法,我們可能在學(xué)生時(shí)代就學(xué)過這種技術(shù)。

let a = 1
let b = 2
// Use a temporary variable to store the value of b first
let temp = b
b = a
a = temp
temp = null
console.log('a', a, 'b', b)

這種方法的優(yōu)點(diǎn)是非常簡(jiǎn)單易懂。缺點(diǎn)是需要多聲明一個(gè)變量,這意味著程序需要占用更多的計(jì)算機(jī)內(nèi)存。

2.使用ES6中的解構(gòu)賦值

我相信大家對(duì) ES6 已經(jīng)很熟悉了,它有一個(gè)很棒的特性叫做解構(gòu)。

使用解構(gòu)功能,我們可以輕松交換兩個(gè)變量的值。

let a = 1
let b = 2
;[ a, b ] = [ b, a ]
console.log('a', a, 'b', b)

我個(gè)人真的很喜歡這種方式了,我們不需要使用任何額外的代碼來完成這項(xiàng)工作。

3.使用異或 (^)

如果你對(duì)它非常感興趣,可以點(diǎn)擊這里(鏈接)進(jìn)行深入研究。

不過別著急,相信看完這張表的內(nèi)容你就知道是怎么回事了:

即使我們只需要知道這兩個(gè)知識(shí)點(diǎn)就足夠了:

  • (“0”^任何值)等于這個(gè)值。
  • 100 ^ 100 等于 0
0 ^ 100 // 100
100 ^ 100 // 0

我想,你一定已經(jīng)猜到該怎么做了!

let a = 1
let b = 2
a = a ^ b
// 1. => a ^ b ^ b
// 2. => a ^ 0
// 3. => b = a = 1
b = a ^ b
// 1. a ^ b => a ^ b ^ a
// 2. a ^ b ^ a => 0 ^ b
// 3. a = b = > 2
a = a ^ b
console.log('a', a, 'b', b)

4.使用加法交換兩個(gè)變量的值

什么?你在搞笑嗎?沒有,你可以使用加法交換兩個(gè)變量的值。

let a = 1
let b = 2
a = a + b // The value of a is a(1) + b(2) = 3
b = a - b // The value of b is a(3) - b(2) = 1
a = a - b // The value of a is a(3) - b(1) = 2
console.log('a', a, 'b', b)

5.使用減法交換兩個(gè)變量的值

既然我們可以使用加法交換兩個(gè)變量的值,為什么不試試減法呢?

let a = 1
let b = 2
a = a - b // The value of a is a(1) - b(2) = -1
b = b + a // The value of b is b(2) + a(-1) = 1
a = b - a // The value of a is b(1) - a(-1) = 2
console.log('a', a, 'b', b)

那么使用加法和減法到底有什么區(qū)別呢?朋友們,你們一定知道JavaScript中有一個(gè)最大的安全數(shù),那么,如果我們使用加法,會(huì)不會(huì)超過這個(gè)數(shù)呢?是的,這個(gè)問題可以通過使用減法來避免。

6.使用對(duì)象交換兩個(gè)變量的值

我們可以將對(duì)象用作交換兩個(gè)變量的橋梁,并讓它鏈接所有這些。

let a = 1
let b = 2
a = {
a: a,
b: b
}
b = a.a
a = a.b
console.log('a', a, 'b', b)

你能用數(shù)組來完成這個(gè)嗎?

let a = 1
let b = 2
a = [ a, b ]
b = a[ 0 ]
a = a[ 1 ]
console.log('a', a, 'b', b)

7.使用“,”逗號(hào)運(yùn)算符

1).數(shù)組和“,”的組合:

let a = 1
let b = 2
a = [b, (b = a)][0]
// The code roughly goes through the following steps
// 1. b = a => b = 1
// 2. a = [ 2, 1 ]
// 2. a = [ 2, 1 ][0] => 2
console.log('a', a, 'b', b)

2).賓語(yǔ)與“,”的組合:

let a = 1
let b = 2
a = b + ((b = a), 0)
// The code roughly goes through the following steps
// 1. a = 2 + ((b = 1), 0) => b = 1
// 2. a = 2 + 0 => a = 2
console.log('a', a, 'b', b)


責(zé)任編輯:龐桂玉 來源: 大前端私房菜
相關(guān)推薦

2018-01-30 17:54:37

數(shù)據(jù)庫(kù)MySQLSQL Server

2025-01-15 10:46:23

開發(fā)JavaScript集合

2023-03-28 11:40:07

邊緣計(jì)算云計(jì)算

2022-05-18 09:01:31

JavaScriptEvalErrorURIError

2016-09-28 20:05:22

2010-09-16 17:47:49

2014-05-13 09:56:24

數(shù)據(jù)挖掘

2011-12-16 14:45:36

JavaJSP

2011-05-30 13:37:46

JSP

2021-12-09 20:30:17

變量面試方法

2023-04-18 15:57:30

2022-10-27 08:09:33

2024-07-29 08:00:00

2024-10-21 13:05:40

2022-09-30 10:48:12

AR制造業(yè)

2017-02-05 10:51:13

2010-01-21 10:41:58

2025-01-16 08:44:55

2025-01-21 08:00:00

限流微服務(wù)算法

2022-05-10 08:08:01

find命令Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)