# [문제 1.] - a와 b의 값을 바꾸시오 ## 내가 푼 문제 ```javascript let a = 1 let b = 2 console.log(a,b) // 1 2 // 변수 값 변경 a = 2 b = 1 console.log(a,b) // 2 1 ``` ## 정답 및 오답 ```javascript let a = 1 let b = 2 console.log(a,b) // 1,2 let c = a a = b b = c console.log(a,b) // 2,1 ``` **틀렸다.** 나는 a = 1 이런식으로 값을 바꿨지만, 정답에서는 새로운 변수에 a의 기존값을 할당한 후 값을 바꾸는 코드다. 왜 이런식으로 값을 변경하는지 생각을 해봤다. 내 생각에는 **안정성**과 **정확성**때문이라고 생각한다. 이런 경우에 문제가 발생할 것 같다. * 서로 변경할 변수가 많을 때 * 변수의 값이 크거나 길 때 이런 문제를 해결하기 위해선 기존값을 복사할 새로운 변수를 만들면 된다. a의 기존값을 c라는 새로운 변수에 복사해둔 후 a = b b = c 이런식으로 서로의 값을 정확하고 안전하게 바꾸면 된다. --- # [문제 2.] - 다음 연산자들의 결과값을 예측한후 console.log()를 통해 확인해 보시오 * 20 + 20 * "20" + "30" * "Hello" + "" + 2021 * 1 + 2 * 3 * (1 + 3) ** 2 * 1/0 * 6 % 2 * 7.5 % 2 * 5 == 5 * 5 === 5 * 5 == "5" * 5 === "5" * 5 != 5.0 * 5 !== 5.0 * "true" === true * 5 <= 5.0 * 5 >= 5 * true || true * true || false * true && true * true && false * !true * !false ## 예측 ```javascript 20 + 20 // 40 "20" + "30" // 20 30 "Hello" + "" + 2021 // Hello 2021 1 + 2 * 3 // 7 (1 + 3) ** 2 // 16 1/0 // 0 6 % 2 // 0 7.5 % 2 // 1.5 5 == 5 // true 5 === 5 // true 5 == "5" // true 5 === "5" // false 5 != 5.0 // false 5 !== 5.0 // false "true" === true // false 5 <= 5.0 // true 5 >= 5 // true true || true // true true || false // true true && true // true true && false // false !true // flase !false // true ``` ## 정답 및 오답 **놀랍게도 다 맞췄다.** 이미 알고있던 개념이라 크게 어려운건 없었다. **(1 + 3) ** 2** 이 문제에서 **연산자가 뭔지 햇갈렸는데 제곱일거같아서 계산해보니 정답과 일치했다. **1/0** 이 문제도 1을 0으로 나누니 0이 나올거 같았지만 Infinity라고 출력됬다. 찾아보니 수학에서 어떤 수를 0으로 나누는것은 정의되지 않은 연산자고, 그 결과는 무한대이기에 Infinity가 출력되는거라.. 쨋던 0이 정답은 맞는듯ㅋㅋ..