You don't know JS - 타입과 문법, 스코프와 클로저

JeongHoon Park·2021년 8월 14일
1
post-thumbnail

1. 갑자기 책을 읽는 이유🧐

난 책을 좋아하지 않는다. 소설보다는 영화를, 설명서보다는 언박싱 브이로그를 보는 걸 더 좋아한다. 그래서 프로그래밍 공부를 할 때도 책보다는 인터넷 강의를 보면서 공부했다. 하지만 프로젝트들을 하면서 새로운 것을 익히고 써먹을 때마다 혹은 알고리즘 공부를 할 때마다 자바스립트에 대한 공부가 부족하다는 것이 느껴졌다. 그래서 이번에 자바스크립트 기초 공부를 하기 시작했다. 그래서 여러가지 자바스크립트 서적과 강의를 추천받아서 알아보다가 You don't know JS를 알게되었다. 지금 읽고 있는데 생각보다 재밌고 생각보다 유익해서 실제로 프로젝트에 바로 적용할 수 있을 법한 팁들도 많이 존재해서 단순히 읽고 끝내는 것이 아니라 정리가 필요하다가 느꼈다. 바로 시작한다.

2. 1장 타입과 문법📕

1. 1절 타입

내장 타입

자바스크립트에는 7가지 내장 타입이 있다.

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol(ES6부터 추가)

값 타입은 'typeof' 연산자로 알 수 있다. 하지만 null의 경우 object로 반환된다.

typeof null === object // true

값이 없는 vs 선언되지 않은

var a;

a; // undefined
b; // ReferenceError

typeof a; // undefined
typeof b; // undefined

위의 예제에서 보면 b;는 선언되지 않았기 때문에 에러를 던진다. 하지만 typeof b;의 경우에는 에러를 던지지 않고 undefined를 반환한다. 이를 이용하면 유용한 safe guard를 만들 수 있다.

// DEBUG를 선언하지 않은 경우
// 1
if(DEBUG) {
  console.log("디버깅을 시작합니다.");
}
// 2
if(typeof DEBUG !== undefined) {
  console.log("디버깅을 시작합니다.");
}

1번의 경우 에러를 던지지만 2번의 경우 단순히 if문을 넘어서 프로그램이 진행된다.


2. 2절 값✍️

특수 값

null 타입의 값은 null 뿐이다. 마찬가지로 undefined 타입의 값은 undefined뿐이다.
수학 연산시 두 피연산자가 숫자가 아닐 경우 유효한 숫자가 나올 수 없으므로 그 결과는 NaN이다. 하지만 NaN은 그자 대로 글자아님(Not a Number)보다는 유효하지 않은 숫자라는 명칭이 더 올바르다.
왜냐하면 typeof NaN === number이기 때문이다. 또한 NaN의 특이한 점은 이뿐만이 아니라 null과 undefined와는 다르게 NaN !== NaN이다.
자바스크립트에는 두가지의 0(영)이 존재한다. 바로 +0과 -0이다.

값 vs 레퍼런스

자바스크립트는 포인터라는 개념이 없고 참조하는 방법도 다른 언어들과 다르다. 우선 어떤 변수가 다른 변수를 참조하는 것은 불가능하다.
자바스크립트는 값 또는 레퍼런스의 할당 맟 전달을 제어하는 구문 암시가 전혀 없다. 대신, 값의 타입만으로 값 복사인지 레퍼런스 복사인지 결정된다.
null, undefined, string, number, boolean과 symbol같은 단순 값은 언제나 값 복사 방식으로 할당/전달된다.
개체나 함수 등 합성 값은 레퍼런스 복사로 할당/전달된다.

var a = 2;
var b = a;
b++;
a; // 2
b; // 3

var c = [1, 2, 3];
var d = c;
d.push(4);
c; // [1, 2, 3, 4];
d; // [1, 2, 3, 4];

💡직접 읽어보면 뼈가 되고 살이 되는 출처
👉YOU DON'T KNOW JS(카일 심슨 지음)

profile
Develop myself, FE developer!

1개의 댓글