가장 기본적인 방법이고 생각하기 쉬운 방법이다. 두 컵의 내용물을 섞이지 않게 서로 바꾸는 방법과 같다.
let
a = 'a',
b = 'b',
temp;
temp = a;
a = b;
b = temp;
console.log('a: ' + a + ', b: ' + b); // 'a: "b", b: "a"'
XOR swap algorithm으로 불리는 방법이다. 하지만 Integer
일 때만 사용할 수 있는 방법이다. 숫자로 된 문자열이나 실수는 정수로 변환된다.
let
a = 10, // or '10', 10.11
b = 100; // or '10', 100.111
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log('a: ' + a + ', b: ' + b); // 'a: 100, b: 10'
number
타입의 값을 바꿀 때 사용할 수 있는 방법이다. 문자열은 문자열의 +
동작으로 인해 swap되지 않는다. 연산 과정에서 JavaScript 내부동작의 영향으로 소수부에 변화가 발생할 가능성이 있다.
let
a = 10, // or 10.11
b = 100; // or 100.111
a = a + b;
b = a - b;
a = a - b;
console.log('a: ' + a + ', b: ' + b); // 'a: 100, b: 10'
한 줄로 작성 가능한 방법이다.
하지만 읽기 어렵다는 이유로 꺼려진다.
let
a = 5,
b = 'abc';
b = [a, a = b][0];
console.log('a: ' + a + ', b: ' + b); // 'a: "abc", b: 5'
원리는 배열을 생성할 때 a
의 값이 복사가 되고 a = b
연산 실행 그리고 배열의 0번째 값
인 a
를 b
에 할당한다. 재밌는 방법이다.
ES6에 추가된 구조 분해 할당(Destructuring_assignment)을 이용해 swap하는 방법이다. 익스플로러에선 지원하지 않지만 많은 사람들이 추천하고 있다!
let
a = 5,
b = 'abc';
[a, b] = [b, a]
console.log('a: ' + a + ', b: ' + b); // 'a: "abc", b: 5'
[참고] https://en.wikipedia.org/wiki/Swap_(computer_programming)#Using_a_temporary_variable
잘 읽고 갑니다 !!