我有两个变量:

var a = 1,
    b = 2;

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


当前回答

我在这里看到了编程奥林匹克。还有一个更棘手的单行解决方案:

b = (function(){ a=b; return arguments[0]; })(a);

小提琴:http://jsfiddle.net/cherniv/4q226/

其他回答

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

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

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

你可以这样做:

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

对于可读性和可维护性,这是无可比拟的(至少在JavaScript中)。任何维护代码的人(包括六个月后的您)都将确切地知道发生了什么。

由于这些都是整数,您还可以使用任意数量的聪明技巧进行交换,而不需要使用第三个变量。例如,你可以使用按位的xor操作符:

设a = 1, b = 2; A = A ^ b; B = a ^ B; A = A ^ b; Console.log ('a现在是:',a); Console.log ('b现在是:',b);

这叫做异或交换算法。维基百科的这篇文章描述了它的运作理论。

“有能力的程序员清楚地意识到自己脑袋的大小是有限的。因此,他以完全谦卑的态度对待他的任务,并避免像瘟疫一样的聪明伎俩。”——埃德斯格·迪克斯特拉

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

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

ES6 (Firefox和Chrome已经支持它 数组匹配)):

设a = 5, b = 6; [a, b] = [b, a]; console.log(“${一}$ {b}”);

您可以使用临时交换变量或XOR。

a = a ^ b
b = a ^ b
a = a ^ b

这只是一个基本的逻辑概念,适用于支持异或操作的每种语言。

编辑:见注释。忘了说,这只适用于整数。假设问题线程中的整数变量