공부 정리/You Don't Know Js

[YDKJ] Get Started - Chapter 2 - 1

경적필패. 2023. 4. 22. 07:10
반응형

요약

 

Each File is a Program

  • 각각의 js파일은 개별적인 프로그램이며, 이 것들이 상호작용하여 하나의 프로그램처럼 보이는 것.
  • 여러 독립된 js파일이 하나의 프로그램으로 동작하는 방법은 global scope뿐.
  • 많은 프로젝트가 개별파일들을 하나의 파일로 결합하여 전달하는 빌드프로세스를 사용함. 이 경우는 단일 파일이 전체 프로그램이 맞음.

 

Values

  • JS에서 값은 기본값(원시값)과 객체 둘로 나뉨
  • `${NAME}` 백틱을 사용한 보간법 설명
  • null과 undefined 중 더 안전하고 확실한 방법은 undefined이며, 사용할 때는 둘 중에 하나로 통일하는 게 좋음
  • Symbol은 특수한 키를 만드는 데 사용함. => 일반적인 프로그램에선 쓸 일 거의 없음, 프레임워크나 라이브러리 같은 저수준에서 사용
const obj ={};
const sym1 = Symbol();
obj[sym1] = "haha";
console.log(obj[sym1]) // "haha"

 

Arrays And Objects

  • 정렬은 객체다.
  • 객체는 더 일반적인 개념. 배열처럼 index로 접근하지 않고 key값으로 접근한다.

 

Value Type Determination

typeof 42; // "number"
typeof "abc"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" -- 실수, 버그!
typeof { "a": 1 }; // "object"
typeof [1,2,3]; // "object"
typeof function hello(){}; // "function"

 

Declaring and Using Variables

  • var, let, const와 관련해서 설명함.
  • 저자는 var을 안 쓰는 게 일반적이지만 그냥 안 쓰는 건 안된다 함. => 모든 기능을 배우고 적절히 사용해야 함을 말하고 싶은 듯.
  • let과 const의 가장 큰 특징은 블록스코프. 그리고 let은 재할당 가능하지만, const는 안됨

 

Functions

//선언문 형태
function(){

}

//표현식 형태
const a = function(){

}

 

Comparisons

  • 원시값은 값을 비교하고, 객체는 주소값을 비교함.
  • ==는 값을 비교하고, ===는 값과 타입을 비교함.
  • 그러나 ===가 항상 맞는 건 아님. => NaN===NaN(false), -0 === 0(true)
  • 그래서 ====라고 말할 수 있는 Object.is()를 사용해도 좋음. ex) Object.is(-0,0) => false

 

Coercive Comparisons

  • ==는 JS의 저자도 인정할 정도로 결함이라는 의견이 지배적
  • 그러나 ==가 타입체크를 안 하는 것이 아님, 변환할 뿐이다.
  • 42 == "42"가 TRUE인 이유는 "42"를 숫자로 변환했기 때문.
  • "A"  > "B"는 FALSE이다. 둘 다 문자열일 경우에는, 사전순으로 비교한다.
  • ===를 사용하면 된다고 생각하지만, >, <, >=, <=도 사용하기 때문에 생각만큼 쉽지는 않다.
  • 강제 타입변환을 피하는 유일한 방법은 같은 타입의 데이터를 비교하는 것뿐.

 

 

 

느낀 점

Get Started라 그런지, 확실히 기초적이고 쉬운 부분을 다루고 있다.

나도 ==가 타입체크를 안 한다고만 단순히 생각하고 있었는데, 책을 통해 다시 한번 생각하는 기회가 되었다.

또한, ===를 약간 맹신하고 있었는데, 허점이 있음을 알게 되었다.

 

 

 

 

반응형