변수 생성 : 변수를 만들겠다고 알려주는 것
var userName;
변수의 초기화(initialize) : 변수를 선언하면서 값을 설정하는 것
var userName = '김철수';
1) hoisting : 아래 상황에서 에러가 나지 않고 undefined가 뜸 (let의 경우, 'ReferenceError: Cannot access 'x' before initialization'라고 에러 뜸)

2) block level scope 미지원
var num = 10;
if (true) {
var num = 20;
console.log('if 안에 num: ', num); // 20
}
3) 변수 재선언 가능
const : 상수
-- 값일 경우 : 값 변경 불가하며, 변수명 대문자로 표기
-- 배열일 경우 : 배열의 데이터 요소 값은 변경 가능(.pop, .push도 가능). 배열 자체의 재할당만 불가능
-- 객체일 경우 : 객체의 프로퍼티 값은 변경 가능(삭제 포함). 객체 자체의 재할당만 불가능
let : 변수
정수와 실수 구분하지 않고, 모두 number로 구분
console.log(10 / 3) -> 3.333
-- 모든 숫자를 integer로 판단
console.log(10 / 0) -> infinity
-- 에러 뜨거나 NaN이 뜨지 않음
수학적 연산 오류가 날 경우, 에러가 뜨지 않고 NaN(Not a Nubmer)가 뜸
문자 & 숫자 더하기 : 숫자->문자열로 자동 변환
e.g) console.log(3+'3') // 33 출력(3을 문자열 '3'으로 인식)
문자 & 숫자 더하기 외 사칙연산 : 문자열-> 숫자로 자동 변환
e.g.) console.log(3*'3') // 9 출력('3'을 숫자 3으로 인식)
수행 실패 시, 에러가 뜨지 않고 NaN라고 뜸
조건문에서 0, '', null, undefined, NaN은 false로 인식
// false
if (false) console.log('false입니다.');
if (0) console.log('숫자 0');
if (null) console.log('null입니다!');
if (undefined) console.log('undefined입니다!');
if (NaN) console.log('NaN입니다!');
if ('') console.log('\'\'입니다!');
// true
if (1) console.log('1입니다!');
if (' ') console.log('\' \'입니다!');
if ('-100') console.log('-100입니다!');
if ([1,2,3]) console.log('[1,2,3]입니다');
if (function () {}) console.log(`함수입니다`);