if (req.body != {} ) >> true : req.body는 {}를 출력하는데 왜 true일까?
req.body도 {}이고 비교하는 것도 {}인데 왜 true가 뜨며
vsCode에서 아래와 같은 주의문을 주었다
if (req.body !== {} ){~}
"JavaScript는 값이 아닌 참조로 객체를 비교하므로 이 조건은 항상 'true'을(를) 반환합니다."
→ 즉 객체끼리는 항상 다를 수 밖에 없다. 객체를 비교할 때는 !== 나 != 를 잘 쓰지 않음.
const obj1 = { name : "kim", job : "teacher" };
const obj2 = { name : "kim", job : "teacher" };
if (Object.entries(obj1).toString() == Object.entries(obj2).toString() ) {
console.log("true")}
Object.entries(객체) : [key,value] 쌍이 반환됨.
[ [ 'name', 'kim' ], [ 'job', 'teacher' ] ]
이렇게 변환한 string끼리 비교하는 것
이런 방법도 가능하다
if (JSON.stringify(obj) == JSON.stringify(com)) >> true
const obj1 = { name : "kim", job : "teacher" };
const obj2 = { job : "teacher", name: "kim" };
const sortObj1 = Object.keys(obj1).sort().reduce( (obj,key)=> ((obj[key] = obj1[key], obj),{} }
const sortObj2 = Object.keys(obj2).sort().reduce((obj,key) => ((obj[key] = obj1[key], obj), {} }
if (JSON.stringify(sortObj1) == JSON.stringify(sortObj2)) >> true
const sortObj1 = Object.keys(obj1).sort().reduce( (obj,key)=> ((obj[key] = obj1[key], obj),{} }
이 코드를 자세히 알아보자
1. 먼저 keys값으로 ['name', 'job']으로 정렬한 후 이 배열을 가지고 reduce함수를 실행한다.
2. obj는 accumulator, key는 currentValue 인자로 obj[key] = obj1[key]는 새로운 obj 객체에 key값을 가지고 다시 담는 것이다.
3. 그 뒤에 오는 ,obj는 쉼표연산자로 obj를 반환한다.
JS의 기본적인 문법 조차 모르고 있어 이해도 안되고 처음에 vscode가 저런 문구를 날려주는데 이해를 못한 것이다.
항상 기초와 기본은 충실히 꾸준히 하자!!