# [문제 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이 정답은 맞는듯ㅋㅋ..