-
Notes from reading 🔖 You Don't Know JS Yet - 2JavaScript 2025. 5. 14. 21:00
## chapter 2
- js에서는 파일 하나가 하나의 프로그램이다.
- 오류 처리 관점에서 하나의 프로그램으로 보는 것은 중요하다. 파일 하나를 하나의 프로그램으로 보기 때문에, 오류 발생 시 파일, 즉 프로그램이 멈춘다.
- 빌드 도구로 합쳐진 JS 파일 하나는 거대한 하나의 프로그램으로 볼 수 있다 💘
- 여러개의 js 파일, 프로그램을 하나의 프로그램으로 작동시키기 위해서 전역 스코프를 잘 활용해야 한다.
- ES6 모듈도 하나의 파일로 개별적인 프로그램으로 볼 수 있다.
- JS의 값은 원시타입과 객체타입이 있다.
- 백틱은 보간법 방식이 허용된다.
- 비어있는 단일 값을 표현하기 위해서 null과 undefined중 하나를 선택할 수 있는데, undefined가 더 안전한 방법이다.
https://github.com/getify/You-Dont-Know-JS/issues/1774
null vs. undefined · Issue #1774 · getify/You-Dont-Know-JS
Yes, I promise I've read the Contributions Guidelines (please feel free to remove this line). Please type "I already searched for this issue": I already searched for this issue Edition: (1st or 2nd...
github.com
- Symbol은 사람이 추측할 수 없게 만든 숨겨진 특수값. 객체에서 특정 키를 만들어낼 때 사용한다. (보통 라이브러리, 프레임워크에서 사용)
- typeof null은 object인데 이것은 JS의 버그
- typeof Array는 object
- var 변수는 함수 스코프 접근 범위를 가진다.
- let 변수는 블록 스코프 접근 범위를 가진다.
- var를 사용하지 말아야한다는 의견이 많은데, 현존하는 모든 기능은 사용할 수 있는 것이니 필요한 기능이 있다면, 자유자재로 사용해보자 🌠
- JS에서 함수로 개발할 때 좀 더 포괄적인 개념인 '프로시저'로 생각해야 한다
- 프로시저는 한 번 이상 호출할 수 있고, 입력값이 있을 수 있으며 하나 이상의 출력값을 반환하는 구문
- 함수 선언( funtion() {} )으로 정의한 함수는 값의 연관이 코드 실행 단계가 아닌 컴파일 단게에서 맺어진다.
- 함수 표현식 ( () => {} )으로 변수에 할당된 함수는 코드가 실행되기 전까지 함수 식별자와 코드가 관계를 맺지 않는다.
- 객체의 프로퍼티 함수 vs class 문법으로 정의한 사용
- 일치비교 vs 동등비교
Nan === Nan; // false 0 === -0; // true- 위의 두 경우는 Number.isNan() 과 Object.is()로 비교해야 원하는대로 비교가 된다.
- 특히 Object.is는 아주 정확하게 비교해준다.
- ===는 아주 정확하게 비교할 수 없다.
- JS에서는 객체 구조가 같은지 비교할 방법이 없다. (참조의 독자성 - 배열의 구조나 내용이 바뀌어도 참조는 안바뀜)
- 객체 구조 비교를 위해서는 직접 코드를 짜야한다
- 객체 내부의 함수는 더 비교하기 어려운데, 문자열로 바꿔 비교한다해도 클로저등을 고려할 수 없다.
- 강제변환은 JS의 중요한 기능이다.
- == 연산자는 JS 창시자 역시 연산 설계에 오류가 있었다고 후회하는데, ==는 피연산자 타입이 다른 경우 비교 이전에 강제로 타입을 맞추는 작업을 시행하는 점에서 === 연산자와 차이가 있다.
- <=나 >=, >, <에서도 ==와 마찬가지로 이러한 타입 강제 변환이 일어난다.
- JS에서 코드 구조화 패턴은 클래스와 모듈 두 가지가 있다.
- 클래스 지향 설계는 상속, 다형성을 빼놓고 생각할 수 없다. (다만, JS에선 잘 사용하지 않는다)
- 모듈역시 클래스처럼 논리적 단위를 기준으로 데이터와 행동을 그룹화 한다. 다만, 문법에 차이점이 있다.
- ES6에서 모듈 문법이 추가되기 전, 자체적으로 클래식 모듈 패턴을 많이 사용했는데, 함수를 호출하면 모듈 인스턴스를 만들어내는 식이다. (내부에 객체를 가지고 있고, 이 객체를 리턴하는 함수) 혹은 모듈 팩토리라고 부른다
- 모듈 팩토리는 new 없이 일반 함수처럼 호출해서 사용한다.
- ES6에서 모듈이 추가되었고, 이게 ESM이다.
- ES 모듈은 모듈을 정의하는 래핑 함수가 없고, 하나의 파일이라는 맥락에서 모듈이 구현된다. ES 모듈은 파일 기반이다. 1파일 1모듈 (export / import)
'JavaScript' 카테고리의 다른 글
Notes from reading 🔖 You Don't Know JS Yet - 4 (0) 2025.06.05 Notes from reading 🔖 You Don't Know JS Yet - 3 (0) 2025.05.27 Notes from reading 🔖 You Don't Know JS Yet - 1 (0) 2025.04.16 JS UI 라이브러리를 instance로 만들어 React 이식하기 (with useImperativeHandle & Tui Grid) 💘 (0) 2025.04.01 Input 이벤트에서 한글 처리하기. event.isComposing이란? (한글 두 번 입력 방지 😸) (6) 2025.03.12