我有两个变量:

var a = 1,
    b = 2;

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


当前回答

因为我听说这个方法运行得比较慢:

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

如果你计划将你的变量存储在一个对象(或数组)中,这个函数应该工作:

function swapVars(obj, var1, var2){
    let temp = obj[var1];
    obj[var1] = obj[var2];
    obj[var2] = temp;
}

用法:

let test = {a: 'test 1', b: 'test 2'};

console.log(test); //output: {a: 'test 1', b: 'test 2'}

swapVars(test, 'a', 'b');

console.log(test); //output: {a: 'test 2', b: 'test 1'}

其他回答

ES6解构:

使用数组:[a, b] = [b, a];//我的最爱

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

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

更详细的方法是

let a = 2, b = 4;
a = [a, b];
b = a[0];
a = a[1];
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);

删除或注释2 //or并使用一组代码运行

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

正如你的问题是宝贵的“只有这个变量,没有任何对象。,答案也会弥足珍贵:

Var a = 1, B = 2

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

这是个诡计 正如罗德里戈·阿西斯所说,它“可以更短”

 b=a+(a=b)-b;

演示: http://jsfiddle.net/abdennour/2jJQ2/

你可以这样做:

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);

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

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