ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Notes from reading 🔖 You Don't Know JS Yet - 2
    JavaScript 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)
Designed by Tistory.