var 는 es6 이전에 변수를 선언할 수 있는 유일한 방법이였음.
재선언, 재할당이 가능했으며, 함수 스코프를 기준으로 동작했음.
호이스팅 때문에 변수 선언 전에 변수를 사용할 수 도 있었고,
같은 함수 안에만 선언되어 있으면 다른 스코프에 선언되어있더라도 사용이 가능했음.
이런 문제 때문에 버그가 발생할때 변수의 사용 흐름을 읽기 힘들어 원인을 찾기 힘들었고,
ES6 이후에 let 과 const 가 생김
ES6 이후에 나온 문법으로,
변수 선언전에 변수를 사용하려고 하면 TDZ 을 만들어 이를 막아주고,
블록 스코프를 가지는 문법.
let 은 재할당이 가능하지만 const 는 재할당이 불가능 하다는 특징을 가짐.
자바스크립트의 타입은 매우 느슨함.
Java 만 하더라도 변수 선언시 String a , Int a 등 타입을 선언해야함.
자바스크립트의 값은 원시타입과 객체 로 나뉨
원시타입은 number sting boolean null undifined Symbol Bigint 등이 있음
Number 타입의 경우 숫자가 아니라면 NaN 을 반환하며, 0.1 + 0.2 === 0.3 이 false 가 나는 등 소숫점 형태는 근사값을 가짐. (이유는 부동소수점을 이용하여 해당 정수를 2진법으로 바꿀때 정확하게 0.10000 이 아니기 때문에..)
null 과 undefined 의 차이도 알아보면 좋은데,
null 은 값이 없음을, undefined 는 값이 할당되지 않음을 뜻함.
객체 는 key : value 로 이로어 지는 컨테이너임
Object() 생성자를 이용하거나,
{
k:v,
k:v
}
와 같이 객체 리터럴을 사용하거나
new 와 같은 생성자 함수를 사용하는 방법이 있음
배열은 순서가 있는 데이터의 집합으로 각 배열의 위치인 인덱스로 원소에 접근한다.
배열은 new Array 나 [] 리터럴을 이용해서 생성할 수 있고,
[1 , empty , 3] 와 같이 중간이 비어져 있는 배열을 희소 배열이라고 하며,
이런 희소배열은 forEach 나 map filter 와 같은 배열의 내장 메서드에서 무시된다.
하지만 find 같은 경우에는 무시되지 않는다
배열은
shift() => 배열 첫번째 원소 삭제후 반환
unshift() => 배열 앞에 원소 추가 후 배열의 길이 반환
push() => 마지막 배열 에 원소 추가하고 배열의 길이 반환
pop() => 마지막 인덱스 삭제 후 결과값 반환
splice() => 베열 데이터를 추가, 교체 혹은 삭제함.
sort() => 배열 정렬
concat() => 배열을 합쳐줌
slice() => 특정 범위의 배열을 복사해 배열 생성함.
단 얕은 복사를 수행하여, 배열중 객체의 경우 해당 객체는 참조가 됨
map() => 배열의 모든 원소를 받아 함수로 실행해서 함수 내에 있는 로직을 태운 뒤에 새로운 배열을 생성합니다.
forEach() => 모든 뭔소를 대상으로 실행
filter() => 함수의 테스트를 통과한 원소들로 새로운 배열로 만듦.