Cómo intercambiar dos variables en JavaScript

Resuelto Lukas asked hace 11 años • 22 respuestas

Tengo estas dos variables:

var a = 1,
    b = 2;

Mi pregunta es como cambiarlos? Solo estas variables, no ningún objeto.

Lukas avatar Apr 25 '13 03:04 Lukas
Aceptado

Aquí hay una sola línea para intercambiar los valores de dos variables.
Variables dadas ay b:

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

Demostración a continuación:

var a=1,
    b=2,
    output=document.getElementById('output');

output.innerHTML="<p>Original: "+a+", "+b+"</p>";

// swap values for variables "a" and "b"
b = [a, a = b][0];

output.innerHTML+="<p>Swapped: "+a+", "+b+"</p>";
<div id="output"></div>
Expandir fragmento

showdev avatar Apr 24 '2013 20:04 showdev

ES6 (Firefox y Chrome ya lo admiten (Destructuring Assignment Array Matching)):

let a = 5, b = 6;
[a, b] = [b, a];
console.log(`${a} ${b}`);
Expandir fragmento

Pedro Justo avatar Sep 18 '2014 10:09 Pedro Justo

Puedes hacerlo:

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

En términos de legibilidad y mantenimiento, esto es inmejorable (al menos en JavaScript). Cualquiera que mantenga el código (incluido usted dentro de seis meses) sabrá exactamente lo que está pasando.

Dado que estos son números enteros, también puedes usar cualquier número de trucos inteligentes 1 para intercambiar sin usar una tercera variable. Por ejemplo, puedes utilizar el operador xor bit a bit:

let a = 1, b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
    
console.log('a is now:', a);
console.log('b is now:', b);
Expandir fragmento

Esto se llama algoritmo de intercambio XOR. Su teoría de funcionamiento se describe en este artículo de Wikipedia .

1 "El programador competente es plenamente consciente del tamaño limitado de su propio cráneo. Por eso aborda su tarea con total humildad y evita trucos astutos como la peste." - Edsger W. Dijkstra

Ted Hopp avatar Apr 24 '2013 20:04 Ted Hopp

No utilice el código siguiente. No es la forma recomendada de intercambiar los valores de dos variables (simplemente use una variable temporal para eso). Simplemente muestra un truco de JavaScript.

Esta solución no utiliza variables temporales ni matrices, solo una suma y es rápida . De hecho, a veces es más rápido que una variable temporal en varias plataformas .
Funciona para todos los números, nunca se desborda y maneja casos extremos como Infinity y NaN.

a = b + (b=a, 0)

Funciona en dos pasos:

  • (b=a, 0)se establece ben el valor anterior de ay produce0
  • a = b + 0se establece aen el antiguo valor deb
Ruben Verborgh avatar Dec 11 '2013 23:12 Ruben Verborgh