var
→ 변수 재선언 가능, 선언 전에 변수 사용도 가능, 함수 스코프
let
, const
→ 블록 스코프
하지만 var는 현재 권장되지 않음
선언
단계초기화
단계할당
단계 → var
는 선언 단계와 초기화 단계가 동시에 진행됨
→ const
는 선언 + 초기화 + 할당이 동시에 진행됨
스코프 내부 어디서든 변수 선언부의 코드가 최상단에 있는 것처럼 작동하는 것
var를 사용한 변수의 경우 호이스팅됨 ! let, const도 호이스팅은 되지만 TDZ
의 영향으로 오류 발생
초기화, 할당은 호이스팅 되지 않아 undefined로 표시됨
console.log(name)
var name = "Jane";
코드를 예측 가능하게 하고, 잠재적인 문제를 줄여줌
Object.assign({}, 원본 객체1, 원본2...)
→ 객체 복제, 병합 const cloneUser = user;는 참조 값 복사 … 똑같은 걸 두 개 만들려면 assign() 사용해야 함 !!Object.keys()
→ 객체 key 배열 반환Object.values()
→ 객체 value 배열 반환Object.entries()
→ 객체 key / value 쌍 배열 반환Object.fromEntries()
→ key / value 쌍 배열을 객체로 변환property key는 문자형으로 사용됨 → 숫자, bool로 작성해둬도 문자로 접근
심볼은 유일한 식별자를 만들 때 사용함 ! log 직으면 다 Symbol()로 뜨지만 내용물은 다름
**const key = Symbol(설명);**
으로 생성 후 프로퍼티 key로 사용
→ 원본 객체 수정 없이 새로운 속성 추가 가능 ( keys()에 보이지 않음 … )
key.**description**
으로 매개변수로 사용했던 설명 확인 가능Object.**getOwnPropertySymbols**(key);
→ 존재하는 symbol 키 리스트 출력Reflect.**ownKeys**(key);
→ symbol 키를 포함한 모든 key 리스트const key = **Symbol.for**(이름);
으로 전역 Symbol 공유 가능toString(진수)
으로 진법 변환 가능 !
Math.round(값 * 10^자릿수)/10^자릿수
공식 사용 num.**toFixed**(자릿수);
함수 사용 → 문자열임에 유의 !! NaN( Not a Number )
을 확인하는 유일한 방법!
NaN != NaN 이므로 ==으로 확인 불가능함 …
Number()와 달리 읽을 수 있는 부분까지 숫자로 변환해줌 !!
소수점이 있을 경우 소수점 아래는 무시
parseFloat()
도 parseInt()와 동일하게 동작, 부동소수점 반환
문자열의 비교는 ASCII 코드를 기준으로 진행됨
"a".codePointAt(0); // 97
String.fromCharCode(97); // "a"