number, string, boolean, null, undefined와 같은 고정된 저장공간을 차지하는 데이터 = 원시자료형 ⇒ 값(데이터)을 저장한다
대량의 데이터를 다루기에 적합한 배열, 객체 = 참조자료형 ⇒ 데이터가 담긴 저장소의 주소를 저장한다.
"hello world!"
"hello codestates!"
// "hello world!" 와 "hello codestates!"는 모두 변경할 수 없는 고정된 값입니다.
let word = "hello world!"
word = "hello codestates!"
// 하지만, word라는 변수에 재할당을 하여 변수에 담긴 내용을 변경하는 것은 가능합니다.
const num1 = 123;
num1 = 123456789; // 에러 발생
// const 키워드로 선언하면, 재할당은 불가합니다.
**var person = {
name: 'Lee'
}
var copy = person;
console.log(copy === person); //true
copy.name = 'Kim'
person.address = 'Seoul'
console.log(person) //{name: 'Kim', address: 'Seoul'}
console.log(copy) //{name: 'Kim', address: 'Seoul'}
------------------------------------------------------------------
var person1 = {
name: 'Lee'
}
var person2 = {
name: 'Lee'
}
console.log(person1 === person2)
//변수에 저장되어 있는 값(참조 주소)을 타입 변환하지 않고 비교, false
console.log(person1.name === person2.name) //true**
얕복, 깊복으로 만들어진 객체는 원본과는 다른 객체다.(참조값이 달라!)
const o = {x:{y: 1}};
//얕은복사
const c1 = {...o};
console.log(c1) // {x:{y: 1}}
console.log(c1 === o) //주소 비교, false
console.log(c1.x === o.x) //값 비교, true
//깊은복사
const_ = require('lodash')
const c2 = _.cloneDeep(o) //깊은복사 해준 것.
console.log(c2 === o) //주소 비교
console.log(c2.x === o.x) //값 비교