https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Grammar_and_types#%EA%B8%B0%EB%B3%B8
변수
선언 방법은 총 3가지
undefined로 초기화됨JS 엔진은 선언 시 이름을 등록해서 존재를 알림
이후 할당 단계에서 메모리 공간 확보하고 암묵적으로 undefined 할당
원시 타입 (Primitive, 7개 )
객체 타입 (Object, 1개 )
JS는 타입 변환이 미친듯이 유연
let intToStr = 34 + ''
console.log(intToStr) // "34"
숫자 + 문자열 → 자동으로 문자열로 변환
new Array도 있지만 []로도 가능함var myList = [, "home", , "school"]
console.log(myList) // [empty, "home", empty, "school"]
중간에 빈 값 넣으면 undefined로 나옴
불리언 객체는 원시 불린 데이터 형을 감싸는 래퍼(wrapper)입니다. 더 많은 정보는 Boolean을 참고하세요.
이게 갑자기 무슨 소리인가 싶다.
불린값은 원시 형태인데 갑자기 객체라고 하고 이 객체는 Wrapper 라고 한다.
그리고
Boolean 객체의 true와 false 값을 원시 Boolean 값 true, false와 혼동해선 안됩니다.
이건 또 무슨 말인가
자세히 뜯어보자
let a = true; // 불린 원시값
let b = false; // 불린 원시값
let obj = new Boolean(true); // 불린 객체
즉 원시값은 진짜 data이고, 객체는 속성과 메서드를 가진 포장된 버전.
그럼 다시 돌아가서
"Boolean 객체의 true/false 값"과 "원시 불린 true/false" 혼동 금지"
는 무슨 말일까
let primitiveFalse = false;
let objectFalse = new Boolean(false);
console.log(primitiveFalse); // false
console.log(objectFalse); // [Boolean: false]
if (primitiveFalse) {
console.log("원시값");
}
if (objectFalse) {
console.log("객체값");
}

primitiveFalse는 원시값 자체가 false기에 console에 나오지 않지만,
objectFalse는 객체 이므로 Truthy 값이 되고 true로 평가되어 console에 나오게 된다.