JavaScript에서 값을 교환하는 10가지 방법 요약

9713 단어 js교환값
앞말
개발 과정에서 우리는 값을 교환해야 한다.일반적으로 우리는 간단한 해결 방안을 사용하고 있다. "임시 변수".하지만 더 좋은 방법이 있다. 그리고 하나만이 아니라 많다.때때로 우리는 인터넷에서 해결 방안을 찾고 찾은 후에 복사하여 붙이지만, 이 작은 코드가 어떻게 작동하는지 생각해 본 적이 없다.이제 우리는 어떻게 쉽고 효율적으로 값을 교환해야 하는지 배워야 한다.
1 임시 변수 사용
먼저 가장 간단한 것이다.

function swapWithTemp(num1,num2){
 console.log(num1,num2)

 var temp = num1;
 num1 = num2;
 num2 = temp;

 console.log(num1,num2)
}

swapWithTemp(2.34,3.45)
2 산수 연산자 + 및 - 사용
수학 마술로 값을 교환할 수도 있다.

function swapWithPlusMinus(num1,num2){
 console.log(num1,num2)

 num1 = num1+num2;
 num2 = num1-num2;
 num1 = num1-num2;

 console.log(num1,num2)
}

swapWithPlusMinus(2.34,3.45)
어떻게 작동하는지 봅시다.우리는 네 번째 줄에서 두 개의 숫자의 총계를 얻었다.이제 화합에서 한 숫자를 빼면 다른 숫자가 정확해진다.이것이 바로 다섯 번째 줄이 한 일이다.num1 변수에 저장된 총계에서num2를 빼면num2에 저장된 원시num1 값을 얻을 수 있습니다.마찬가지로 여섯 번째 줄의num1에서num2의 값을 얻는다.
주의: +와 -를 교환하는 단행 코드 방안이 하나 더 있습니다. 하지만...
그것은 다음과 같다.

function swapWithPlusMinusShort(num1,num2){
 console.log(num1,num2)

 num2 = num1+(num1=num2)-num2;

 console.log(num1,num2)
}

swapWithPlusMinusShort(2,3)

위의 코드는 예상한 결과를 제시했다.()의 표현식은num2를num1에 저장한 다음num1-num2를 빼고num2-num2=0을 제외하고는 아무것도 하지 않았기 때문에 결과를 얻었다.그러나 부동 소수점을 사용할 때 의외의 결과를 볼 수 있다.
다음 코드를 실행하고 결과를 확인하십시오.

function swapWithPlusMinusShort(num1,num2){
 console.log(num1,num2)

 num2 = num1+(num1=num2)-num2;

 console.log(num1,num2)
}

swapWithPlusMinusShort(2,3.1)

3 + 또는 - 연산자만 사용
+ 연산자만 사용하면 + 와 - 를 동시에 사용할 수 있습니다.
다음 코드를 참조하십시오.

function swapWithPlus(num1,num2){
 console.log(num1,num2)

 num2 = num1 + (num1=num2, 0)

 console.log(num1,num2)
}

//Try with - operator
swapWithPlus(2.3,3.4)

위의 코드는 유효하지만 가독성을 희생했다.네 번째 줄의 ()에서num1은num2에 값을 부여하고 옆에 있는 0은 반환값입니다.즉, 네 번째 행의 연산 논리는 다음과 같습니다.

num2 = num1 + 0 
=> num2 = num1.
그래서 정확한 결과를 얻었습니다.
참고: 일부 JavaScript 엔진은 위의 코드를 최적화하여 + 0을 무시할 수 있습니다.
4 연산자 사용* 및/
*와/연산자로 더 많은 수작을 부립시다.
그 원리는 이전의 방법과 같지만, 약간의 작은 문제가 있다.

function swapWithMulDiv(num1,num2){
 console.log(num1,num2)

 num1 = num1*num2;
 num2 = num1/num2;
 num1 = num1/num2;

 console.log(num1,num2)
}

swapWithMulDiv(2.34,3.45)
이전 방법과 같다.우선 두 개의 숫자의 곱셈을 얻어서num1에 저장합니다.그리고 다섯 번째 줄에서num2를 이 결과와 제외하고 첫 번째 숫자를 얻은 다음에 이 과정을 반복하여 두 번째 숫자를 얻는다.
이제 너는 수학자가 되었다.
그런데 그 사소한 문제는 어디에 있습니까?
한번 시도해 보겠습니다.

function swapWithMulDiv(num1,num2){
 console.log(num1,num2)

 num1 = num1*num2;
 num2 = num1/num2;
 num1 = num1/num2;

 console.log(num1,num2)
}

// , 
swapWithMulDiv(2.34,0)
우리의 값은 교환되지 않고 이상한 NaN을 얻었는데 이게 어떻게 된 일입니까?만약 네가 초등학교 수학 과목을 기억하고 있다면, 그것은 무의미하기 때문에 0으로 나누지 말아야 한다는 것을 생각할 것이다.
그리고 이런 방법의 다른 문제를 살펴보고 아래의 코드를 보십시오.

function swapWithMulDiv(num1,num2){
 console.log(num1,num2)

 num1 = num1*num2;
 num2 = num1/num2;
 num1 = num1/num2;

 console.log(num1,num2)
}
// 
swapWithMulDiv(2.34,Infinity)
맞아, 또 난.Infinity를 사용하여 값을 제거할 수 없기 때문에 정의되지 않습니다.
하지만 다시 해보고 싶어요.

function swapWithMulDiv(num1,num2){
 console.log(num1,num2)

 num1 = num1*num2;
 num2 = num1/num2;
 num1 = num1/num2;

 console.log(num1,num2)
}

// 
swapWithMulDiv(2.34,-Infinity)

- Infinity의 결과는 앞의 코드와 같고 원인도 같다.
설령 네가 뛰어난 수학자라 하더라도 무능할 때가 있다는 사실이 증명된다.
다음은 * 및/값을 교환하는 비교적 짧은 버전으로, 여전히 같은 문제가 있습니다.

function swapWithMulDivShort(num1,num2){
 console.log(num1,num2)

 num2 = num1*(num1=num2)/num2;

 console.log(num1,num2)
}

swapWithMulDivShort(2.3,3.4)

위의 코드는 +와 -로 교환할 때의 비교적 짧은 코드와 유사하다.num2를 num1에 부여하고 네 번째 줄의 연산 논리는 다음과 같다.

num2 = num1 * num2 / num2
 => num2 = num1
이렇게 하면 두 개의 값이 서로 바뀐다.
5) * 또는/연산자만 사용

function swapWithMul(num1,num2){
 console.log(num1,num2)

 num2 = num1 * (num1=num2, 1)

 console.log(num1,num2)
}

//Try with / and ** operator
swapWithMul(2.3,3.4)

위의 절차는 유효하지만 가독성을 희생했다.네 번째 줄의 () 에서, 우리는num1을num2에 부여하고, 옆에 있는 1은num2에 되돌려 줍니다.즉, 네 번째 행의 논리는 다음과 같습니다.

num2 = num1 * 1 
 => num2 = num1
이렇게 해서 결과를 얻었다.
6 XOR(비트별 또는 다름)를 사용합니다.
XOR는 바이너리 연산을 위해 사용됩니다.두 개의 다른 입력이 있을 때, 그 결과는 1이고, 그렇지 않으면 0이다.
X
Y
X^Y


0

0

0


0
0
0
먼저 그 작업 원리를 이해해라!

function swapWithXOR(num1,num2){
 console.log(num1,num2)

 num1 = num1^num2;
 num2 = num1^num2; 
 num1 = num1^num2;

 console.log(num1,num2)
}
//  
swapWithXOR(10,1)

10의 4비트 이진수 -> 1010
1의 4비트 이진수 -> 0001
현재:

 : 
num1 = num1 ^ num2 
 => 1010 ^ 0001 
 => 1011 
 => 7 
 : 
num2 = num1 ^ num2 
 => 1011 ^ 0001 
 => 1010 
 => 10
 : 
num1 = num1 ^ num2 
 => 1011 ^ 1010 
 => 0001 
 => 1
두 개의 값이 교환되었다.
또 다른 예를 살펴보겠습니다.

function swapWithXOR(num1,num2){
 console.log(num1,num2)

 num1 = num1^num2;
 num2 = num1^num2;
 num1 = num1^num2;

 console.log(num1,num2)
}

swapWithXOR(2.34,3.45)

응??교환된 값은 어디에 있습니까?우리는 단지 숫자의 정수 부분을 얻었을 뿐이다. 이것이 문제다.XOR는 입력이 정수라고 가정하기 때문에//에 따라 계산을 수행합니다.그러나 부동점수는 정수가 아니라 IEEE754 표준에 의해 표시된 것으로 숫자를 세 부분으로 나눈다. 기호위, 지수를 대표하는 한 조위와 끝수를 대표하는 한 조위다.자릿수는 1 (포함) 과 2 (없음) 사이의 숫자입니다.그래서 얻은 값이 정확하지 않습니다.
다른 예:

function swapWithXOR(num1,num2){
 console.log(num1,num2)

 num1 = num1^num2;
 num2 = num1^num2;
 num1 = num1^num2;

 console.log(num1,num2)
}
//   infinities  .
swapWithXOR(-Infinity,Infinity)

전혀 의외의 일이 없다. 우리는 예상한 결과를 얻지 못했다.Infinity와 C Infinity가 모두 부동 소수점이기 때문입니다.앞에서 설명한 바와 같이 XOR의 부동 소수점은 문제입니다.
7 XNOR 사용
이것은 바이너리 연산에 사용되지만 XOR와는 정반대입니다.두 개의 다른 입력이 있을 때 XNOR의 결과는 0이고 그렇지 않으면 결과는 1입니다.JavaScript는 XNOR을 실행하는 연산자가 없으므로 NOT 연산자로 XOR의 결과를 되돌려야 합니다.
X
Y
XNOR




0
0
0

0
0
0

작동 원리 파악:

function swapWithXNOR(num1,num2){
 console.log(num1,num2)

 num1 = ~(num1^num2);
 num2 = ~(num1^num2);
 num1 = ~(num1^num2);

 console.log(num1,num2)
}

// 
swapWithXNOR(10,1)

10의 4비트 이진수 -> 1010
1의 4비트 이진수 -> 0001
네 번째 줄:

num1 = ~(num1 ^ num2) 
 => ~(1010 ^ 0001) 
 =>~(1011) 
 => ~11 
 => -12
이것은 음수이기 때문에 2진법으로 변환하고 2의 부호를 계산하여 10진수 값을 얻어야 한다. 예를 들어

-12 => 1100 
 => 0011 + 1 
 => 0100
행 5:

num2 = ~(num1 ^ num2) 
 => ~(0100 ^ 0001) 
 => ~(0101) 
 => ~5 
 => -6-6 
 => 0110 
 => 1001 + 1
 => 1010 
 => 10
여섯 번째 줄:

num1 = ~(num1 ^ num2) 
 => ~(0100^ 1010) 
 => ~(1110) 
 => ~14 
 => -15-15 
 => 1111 
 => 0000 + 1 
 => 0001 
 => 1
시간이 좀 걸렸지만 값을 교환했다.그러나 불행하게도 XOR와 같은 문제에 부딪혀 부동점수와 무한대를 처리할 수 없다.
다음 값을 시도해 보십시오.

function swapWithXNOR(num1,num2){
 console.log(num1,num2)

 num1 = ~(num1^num2);
 num2 = ~(num1^num2);
 num1 = ~(num1^num2);

 console.log(num1,num2)
}

swapWithXNOR(2.3,4.5)

8 배열에서 값 부여
이것은 한 가닥의 기교다.코드 한 줄만 있으면 교환할 수 있고, 더 중요한 것은 수학 연산이 필요 없고, 수조의 기본 지식만 필요하다.근데 이상해 보일 수도 있어.
먼저 그것의 실제 효과를 살펴보자.

function swapWithArray(num1,num2){
 console.log(num1,num2)

 num2 = [num1, num1 = num2][0];

 console.log(num1,num2)
}

swapWithArray(2.3,Infinity)

수조의 아래 표시 0 위치에num1을 저장하고, 아래 표시 1에서num2를num1에 분배하고num2를 저장합니다.또한, 우리는 단지 [0]에 접근하여 수조의 num1 값을num2에 저장할 뿐이다.그리고 여기에서 우리가 원하는 모든 것을 교환할 수 있다. 예를 들어 정수, 부동점수(무궁수 포함), 문자열 등이다.깔끔해 보였지만 코드의 선명도를 잃었다.
9 해구 표현식 사용
이것은 ES6의 기능입니다.이것은 모든 방법 중 가장 간단한 것이다.코드 한 줄만 있으면 교환을 완성할 수 있습니다.

let num1 = 23.45;
let num2 = 45.67;

console.log(num1,num2);

[num1,num2] = [num2,num1];

console.log(num1,num2);

10. 즉시 호출된 함수 표현식 사용(IIFE)
이것은 가장 이상한 것이다.간단히 말하면 IIFE는 정의된 후 즉시 실행되는 함수입니다.
두 값을 교환할 수 있습니다.

function swapWithIIFE(num1,num2){
 console.log(num1,num2)

 num1 = (function (num2){ return num2; })(num2, num2=num1)

 console.log(num1,num2)
}

swapWithIIFE(2.3,3.4)

위의 예에서 네 번째 줄에서 함수를 즉시 호출합니다.마지막 괄호는 이 함수의 매개 변수이다.두 번째 파라미터는num1에 값을 부여하고 첫 번째 파라미터만 되돌려주지만 이런 교환 방법은 효율이 높지 않다.
총결산
본고는 JavaScript에서 값을 교환하는 데 사용되는 여러 가지 방법을 탐구하였다.도움이 됐으면 좋겠어요!
자바스크립트에서 값을 교환하는 10가지 방법에 대해 소개합니다. 자바스크립트 값을 교환하는 방법에 대한 더 많은 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기