我有两个变量:
var a = 1,
b = 2;
我的问题是如何交换它们?只有这个变量,没有任何对象。
我有两个变量:
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'}
其他回答
单行交换
a = a^b^(b^=(a^b));
你可以这样做:
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);
这叫做异或交换算法。维基百科的这篇文章描述了它的运作理论。
“有能力的程序员清楚地意识到自己脑袋的大小是有限的。因此,他以完全谦卑的态度对待他的任务,并避免像瘟疫一样的聪明伎俩。”——埃德斯格·迪克斯特拉
下面是交换两个变量值的一行代码。 给定变量a和b:
b = [a, a = b][0];
演示如下:
var = 1, b = 2, 输出= . getelementbyid(“输出”); 输出。innerHTML="<p>原来:"+a+", "+b+"</p>"; //交换变量a和b的值 B = [a, a = B][0]; 输出。innerHTML+="<p>交换:"+a+", "+b+"</p>"; < div id = "输出" > < / div >
不要使用下面的代码。这不是交换两个变量值的推荐方法(简单地使用临时变量)。它只是展示了一个JavaScript技巧。
这个解决方案不使用临时变量,不使用数组,只添加一次,而且速度很快。 事实上,在一些平台上,它有时比临时变量更快。 它适用于所有数字,从不溢出,并处理边界情况,如无穷大和NaN。
a = b + (b=a, 0)
它分两步工作:
(b=a, 0)将b设置为a的旧值并产生0 A = b + 0将A设置为b的旧值
因为我听说这个方法运行得比较慢:
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'}