如何在JavaScript中交换两个变量

229

我有这两个变量:

var a = 1,
    b = 2;

我的问题是如何交换它们?仅限这些变量,而不是任何对象。


8
在计算机科学中,交换(Swap)是指将两个变量的值互换。使用一个临时变量可以轻松地实现这一操作。具体来说,我们可以将第一个变量的值存储在一个临时变量中,然后将第二个变量的值赋给第一个变量,最后将临时变量的值赋给第二个变量。这种方法适用于几乎所有编程语言。 - Kijewski
22个回答

6

ES6 解构赋值:

使用数组: [a, b] = [b, a]; // 我最喜欢的方式

使用对象: {a,b} = {a:b, b:a}; // 也不错


4
我们怎么可能错过这些经典的一句话呢?
var a = 1, b = 2
a = ({a:b, _:(b=a)}).a;

And

var a = 1, b = 2
a = (_=b,b=a,_);

最后一种方法会暴露全局变量'_',但这不应该成为问题,因为典型的JavaScript惯例是将其用作“不关心”的变量。


1
第二个有一个错别字。应该是 a = (_=b,b=a,_); - Alexandre Khoury
下划线 _ 是什么意思?为什么它不需要声明? - day
下划线只是全局变量名称,您可以将其替换为任何有效的名称。例如,a =(justsomething = b,b = a,justsomething) - Teemu Ikonen
6
不要使用未声明的全局变量,这是在实际应用中产生严重错误的必然途径。 - oriadam
如果有人使用underscore.js,并尝试使用第二个选项,他们会非常不开心。 - Ted Hopp

4

单行交换

a = a^b^(b^=(a^b));

3
var a = 5;
var b = 10;

b = [a, a = b][0];
//or
b = [a, a = b];
b = b[0];

//or
b = [a, b];
a = b[1];
b = b[0];


alert("a=" + a + ',' + "b=" + b);

请删除或注释掉两个//or,并使用一组代码运行。

http://jsfiddle.net/USdv8/57/


3
我在这里看到了一种编程奥林匹克的氛围。再来一个棘手的单行解决方案:
b = (function(){ a=b; return arguments[0]; })(a);

Fiddle: http://jsfiddle.net/cherniv/4q226/


2
不需要使用缓慢的“arguments”,只需执行“b =(function(x){return x;})(a,a = b)”。 - Ruben Verborgh
1
@RubenVerborgh 是的,但是使用参数时我们不需要定义第三个变量! - Ivan Chernykh
1
从技术上讲,“arguments”列表也将是一个变量。 - Ruben Verborgh
1
你可以通过将参数传递给函数来将 arguments[0] 赋值给变量 a - Ruben Verborgh
1
我甚至觉得这不算一行代码,因为任何解决方案都可以像这样省略换行符。 - Ingo Bürk
显示剩余2条评论

3

first way,

var a = 5, b = 9;

a = a - b;
b = a + b;
a = b - a;

console.log(a, b);

第二种方法

var a = 19, b = 22;

[a, b] = [b, a];

console.log(a, b);

简单明了的回答。


2
我们可以像这样交换变量:
var val1 =  117,
    val2 = 327;

val2 = val1-val2; 
console.log(val2);
val1 = val1-val2;
console.log(val1);
val2 = val1+val2;
console.log(val2);

2

在ES5之前,要交换两个数字,您必须创建一个临时变量,然后交换它。 但是在ES6中,使用数组解构非常容易交换两个数字。请参见示例。

let x,y;
[x,y]=[2,3];
console.log(x,y);      // return 2,3

[x,y]=[y,x];
console.log(x,y);      // return 3,2

了解更多关于JavaScript ES6解构的内容


1
我们可以使用IIFE在不需要额外参数的情况下交换两个值。

var a = 5, b =8;
b = (function(a){ 
    return a 
}(a, a=b));

document.write("a: " + a+ "  b:  "+ b);


1

虽然之前已经给出了相同的答案,但这里有一张png图片来描述它。

最简单的形式:

enter image description here


当重新分配变量时,不允许使用“let”关键字两次。 - Normal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接