March 20, 2020
원시타입과 참조형 타입
원시타입: Primitive Data Type
원시타입에는 Number, Boolean, String, Symbol, null, undefined 가 있다.
원시타입은 변수에 값 자체가 저장된다.
참조타입: Reference Data Type
참조타입에는 Array, Object가 있다.
참조타입은 변수에 값이 저장되는 것이 아니라, 값이 저장된 메모리 주소를 참조하고 있다. 즉 값이 저장된 공간은 따로있고 변수에는 이 메모리 주소를 가지고 있는것. 자바스크립트는 메모리 위치에 직접 접근하는 것을 허용하지 않으므로 객체의 메모리 공간을 직접 조작하는 일이 불가능하다. 만약 객체를 조작한다면 객체 자체가 아니라 해당 객체에 대한 참조를 조작하는 것이다.
맵이란 객체와 비슷하게 키 데이터 항목들의 모음이다. 맵과 객체의 가장 큰 차이점은 맵의 키는 어떠한 타입이든 허용한다.
let map = new Map()
map.set('1', '안녕하세용')
map.get('1') // "안녕하세용"
map.set(true, '재영이')
map.get(true) //"재영이"
map.size // 2
map[key] 이렇게 접근하는것은 올바른 접근방식이 아니다. 이렇게 써도 작동은 하지만 이 경우 순수한 자바스크립트 객체로 취급하기 때문이다. 따라서 맵을 사용하려면 set, get 을 사용해야한다.
map
.set('1', 'str1')
.set(1, 'num1')
.set(true, 'bool1')
맵 메소드 체이닝
맵의 반복과 관련하여 3가지 메소드가 있다. 기본적으로 for..of 로 사용된다.
let recipeMap = new Map([
['cucumber', 500],
['tomatoes', 350],
['onion', 50],
])
for (let vegetable of recipeMap.keys()) {
console.log(vegetable) // cucumber, tomatoes, onion
}
for (let entry of recipeMap) {
// recipeMap.entries() 와 같다
console.log(entry) // (2) ["cucumber", 500]["tomatoes", 350]["onion", 50]
}
set는 특별한타입의 모음. 키가 존재하지않고 각각의 값들은 한번만 들어갈 수 있다. 즉 중복이 안된다.
let set = new Set()
let jy = { name: '재영' }
let koko = { name: '코코' }
let popo = { name: '포포' }
set.add(jy)
set.add(koko)
set.add(popo)
set.add(jy)
set.add(popo)
console.log(set.size) // 3
for (let who of set) {
console.log(who.name) // 재영 . 코코. 포포
}
세트는 배열이 될 수 있어 arr.find를 사용하여 중복을 확인할 수 있으나 배열의 모든 전체 요소를 검사하므로 성능이떨어진다. set 내부적으로 최적화 되어있다.
세트의 반복 또한 맵의 반복과 비슷하다.
맵은 객체와 비슷하고 세트는 배열과 비슷하나 다른 특징을 가졌다.