제목 처럼 두개의 빈 배열이 같을 수 없다.
그 이유를 검색해서 찾아보니 스택오버플로우에 아주 명확하게 답이 나와 있었다. 참고하시라고 링크를 여기에 걸어둔다.
https://stackoverflow.com/questions/40313263/why-is-in-javascript
var array = [];
var anotherArray = array;
// these two will point to the same array, so they are equal
array === anotherArray; // true
array === []; // false
array.push('something');
anotherArray.length; // 1
[] creates a new (and empty) array each time you write it. You are comparing two arrays, regardless of their content, their pointer (or reference) are being compared.
배열은 그 자체로 용량이 커서 메모리에는 레퍼런스만 담는 참조 자료형이지, primitive type이 아니다.
그래서 위 스니펫에서 두 변수가 같다고 한다.
(참조하는 주소가 같기 때문이다.)
하지만 []자체를 새로 쓸 경우엔, 새로운 빈 배열이 만들어진다.(주소가 다르다)
그래서 위 코드처럼 false가 나오는 것이다.
이러한 이유로 조건문을 작성할 때, 빈 배열을 받아오는 조건이 있을 경우엔 arr ===[] 로 쓰는 게 아니고, arr.length === 0으로 쓰는 게 적합하다.
11.22 추가작성
위 개념은, 구조는 같은데 호수가 같은 아파트를 생각하면 더 이해가 빠를 것이다..라고 줌 세션에서 이야기를 들었다.
참고로, 자바스크립트의 몇몇 자료형은 object를 이용해서 만들어진 것이 많다고 한다. 예를 들어 null의 경우 다음 코드를 콘솔에 찍어보면 object가 나온다. 그래서, 조건문을 작성할 경우, 이것을 따로 처리를 해 줘야 함에 유의한다.