-
Notifications
You must be signed in to change notification settings - Fork 13
노마드코더의 Value Types and Reference Types 설명
KIM HAE YEON edited this page Apr 9, 2019
·
2 revisions
console.log([10]===[10])
console.log({'a':20}==={'a':20})
이 둘이 왜 false 값을 리턴하는지 설명.
- value
let a = 50;
let b = a;
console.log(a); // 50
console.log(b); // 50
let a = 50;
let b = a;
a = 10;
console.log(a); // 10
console.log(b); // 50
복사 . 붙여넣기. 참조를 하지 않음.
- reference
const sexy = ["kimchi","potato"];
const pretty = sexy;
console.log(pretty); // ['kimchi','potato']
sexy.push("hELLO");
console.log(pretty); // ['kimchi','potato','hELLO']
pretty를 변경하지 않고 sexy를 변경 하였는데 pretty도 변경이 되었음. 값을 복사하는 것이 아니라 참조하는 것. sexy는 해당 배열을 참조하고 있는 것. 배열은 둥둥 떠있고, sexy는 해당 배열을 가리키고 있음. a=50이다라는 것과 다르다. 참조 하는 것이 아니고 해당 값이라고 말하는 것임. sexy는 해당 배열을 참조하는 것. 해당 배열은 어느 메모리 어딘가에 위치해있음. pretty는 sexy를 참조하고 있음. 배열을 업데이트하면 pretty, sexy가 동시에 업데이트된 배열을 출력함. => 동일한 배열을 참조하고 있음.
const sexy = ["kimchi","potato"];
const pretty = sexy;
console.log(pretty); // ['kimchi','potato']
sexy.push("hELLO");
console.log(pretty); // ['kimchi','potato','hELLO']
sexy.push("lalalalalalalal");
console.log(sexy); // ['kimchi','potato','hELLO','lalalalalalalal']
sexy가 'lalalalalalalal'를 가지게 됨. 해당 배열을 sexy 또는 pretty에서 업데이트를 함.
둥둥 떠다니는 배열을 sexy, pretty가 각각 참조하는 것임.
console.log([10]===[10])
console.log({'a':20}==={'a':20})
그래서 반환값이 false인 것이다. 이 둘은 각각의 메모리에 위치한 각기 다른 object이다.
const x = {
a: 'hello'
}
const b = x;
b.a = 'lalaal'
console.log(x)
이런 상황에서 x를 b를 통해 업데이트 할 수 있음.
value는 string, number, boolean, NaN, undefined, null가능 reference는 array, object, function에서 사용될 수 있음.
일부 의역이 들어간 경우도 있으므로 해당 원문의 내용과 조금 다를 수 있습니다.
문제가 될 소지가 있다거나 혹은 수정이 필요한 사항이 있다면 있다면 issues 보내주세요.
기술문서
- 호출스택
- 원시자료형
- 값타입과 참조타입
- 명시적 변환, 암시적 변환, Nominal, 구조화, 덕 타이핑
- == vs === vs typeof
- 함수 범위, 블록 범위, 렉시컬(lexical) 범위
- 식(expression) vs 문(statement)
- IIFF, Modules, Namespaces
- 메세지큐와 이벤트루프
- setTimeout, setInterval, requestAnimationFrame
- 자바스크립트 엔진
- 비트 연산자, 형식화 배열, 버퍼(배열)
- DOM과 Layout Trees
- 팩토리와 클래스
- this, call, apply, bind
- new, 생성자, instanceof, 인스턴스
- 프로토타입의 상속과 체인
- Object.create와 Object.assign
- map, reduce, filter
- 순수함수, 부수효과, 상태변이
- Closure
- 고차함수
- 재귀
- 컬렉션과 생성기
- Promise
- async, await
- 자료구조
- 함수 성능과 빅 오 표기법
- 알고리즘
- 상속, 다형성, 코드의 재사용성
- 설계패턴
- 부분 어플리케이션, 커링, Compose, Pipe
- 클린코드