이 두 가지 변수가 있습니다.
var a = 1,
b = 2;
내 질문은 그것들을 바꾸는 방법입니까? 이 변수 만 개체가 아닙니다.
답변
다음은 두 변수의 값을 바꾸는 하나의 라이너입니다.
주어진 변수 a
와 b
:
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
답변
여기서 한 라이너 가정이다 a
과 b
이미 존재하고 교환 할 필요가 값을 가지고
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;
데모 -세 번째 변수 사용