我有两个变量:

var a = 1,
    b = 2;

我的问题是如何交换它们?只有这个变量,没有任何对象。


当前回答

我们怎么会错过这些经典的俏皮话呢

var a = 1, b = 2
a = ({a:b, _:(b=a)}).a;

And

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

最后一个暴露了全局变量“_”,但这并不重要,因为典型的javascript惯例是使用它作为“不在乎”变量。

其他回答

虽然前面给出了同样的答案,但这里有一个png来描述它。

最简单的形式:

我们可以使用IIFE交换两个值,而不需要额外的参数

Var a = 5, b =8; B =(函数(a){ 返回一个 } (a, a = b)); 文档。写("a: "+ a+ " b: "+ b);

let a = 2, b = 4;
[b, a] = [a, b];

更详细的方法是

let a = 2, b = 4;
a = [a, b];
b = a[0];
a = a[1];

下面是一行代码,假设a和b已经存在,并且需要交换值:

var c=a, a=b, b=c;

正如@Kay所提到的,这实际上比数组方式执行得更好(几乎是数组方式的2倍)。

使用第三个变量,像这样:

var a = 1,
    b = 2,
    c = a;

a = b; // must be first or a and b end up being both 1
b = c;

DEMO -使用第三个变量