[javascript] JavaScript에서 두 변수를 바꾸는 방법

이 두 가지 변수가 있습니다.

var a = 1,
    b = 2;

내 질문은 그것들을 바꾸는 방법입니까? 이 변수 만 개체가 아닙니다.



답변

다음은 두 변수의 값을 바꾸는 하나의 라이너입니다.
주어진 변수 ab:

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

아래 데모 :

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

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

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

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


답변

ES6 (Firefox 및 Chrome은 이미이를 지원합니다 (할당 배열 일치 구성)) :

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


답변

당신은 이것을 할 수 있습니다 :

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

가독성과 유지 관리 성을 위해 이것은 적어도 JavaScript에서는 이길 수 없습니다. 6 개월 후부터 코드를 유지 관리하는 사람이라면 무슨 일이 일어나고 있는지 정확히 알 수 있습니다.

이것들은 정수이므로, 많은 영리한 트릭 1 을 사용하여 세 번째 변수를 사용하지 않고 바꿀 수 있습니다. 예를 들어 비트 xor 연산자를 사용할 수 있습니다.

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

이것을 XOR 스왑 알고리즘이라고합니다. 운영 이론은 이 위키 백과 기사에 설명되어 있습니다.

1 “유능한 프로그래머는 자신의 두개골의 제한된 크기를 완전히 알고 있습니다. 따라서 그는 겸손하게 자신의 임무에 접근하여 전염병과 같은 영리한 속임수를 피합니다.” — Edsger W. Dijkstra


답변

아래 코드를 사용하지 마십시오. 두 변수의 값을 바꾸는 것이 권장되는 방법 은 아닙니다 ( 일시적으로 임시 변수사용하십시오 ). JavaScript 트릭 만 보여줍니다.

이 솔루션은 임시 변수, 배열, 하나의 추가 만 사용하며 빠릅니다 . 사실, 때로는 여러 플랫폼에서 임시 변수보다 빠릅니다 .

그것은 모든 수에 적용되며 오버플로가 발생하지 않으며 Infinity 및 NaN과 같은 엣지 케이스를 처리합니다.

a = b + (b=a, 0)

두 단계로 작동합니다.

  • (b=a, 0)세트 b이전의 값 a과 수율0
  • a = b + 0세트 a의 이전 값b

답변

ES6부터는 변수를보다 우아하게 바꿀 수도 있습니다.

var a = 1,
    b = 2;

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

console.log('a:', a, 'b:', b); // a: 2 b: 1


답변

여기서 한 라이너 가정이다 ab이미 존재하고 교환 할 필요가 값을 가지고

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

@Kay가 언급했듯이 이것은 실제로 배열 방식보다 성능이 뛰어납니다 (거의 2 배 빠름).


답변

다음과 같이 세 번째 변수를 사용하십시오.

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

a = b; // must be first or a and b end up being both 1
b = c;

데모 -세 번째 변수 사용