console.log

[모던 자바스크립트 Deep Dive] 20 - 21 장 본문

개발공부/JavaScript

[모던 자바스크립트 Deep Dive] 20 - 21 장

foresight 2023. 8. 26. 19:55

20. strict mode

strict mode

  • 잠재적인 오류를 발생시키기 어려운 개발 환경을 만들기 위해 ES5부터 추가된 엄격 모드
  • 즉시 실행 함수로 감싼 스크립트 단위로 'use strict'; 적용
  • 전역에 적용하면 외부 서드파티 라이브러리를 사용하는 경우 오류를 발생시킬 수 있음
  • 함수 단위로 적용하면 모든 함수에 일일이 적용해야 하므로 번거로움
  • strict mode 로 걸러낼 수 있는 에러
    • 암묵적 전역 - 선언하지 않은 변수를 참조하면 ReferenceError 발생
    • 변수, 함수, 매개변수의 삭제 - delete연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError 발생
    • 매개변수 이름의 중복 - 중복된 매개변수 이름 사용으로 SyntaxError 발생
    • with 문의 사용 - with 문을 사용하면 SyntaxError 발생
  • strict mode 적용에 의한 변화
    • 일반 함수의 this
      • strict mode에서 일반 함수로서 호출하면 this에 undefined 바인딩 됨
    • arguments 객체
      • strict mode에서 매개변수에 전달된 인수를 재할당해도 arguments 객체에 반영되지 않음

21. 빌트인 객체

자바스크립트 객체의 분류

  • 표준 빌트인 객체
    • String, Object, Number, Boolean 등등 40여 개의 표준 빌트인 객체 제공
    • 이들은 모두 인스턴스를 생성할 수 있는 생성자 함수 객체
    • 프로토타입 메서드와 정적 메서드 제공
    • Math, Reflect, JSON 은 이와 달리 정적 메서드만 제공
  • 호스트 객체
  • 사용자 정의 객체

원시값과 래퍼 객체

  • 원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없는데도 마치 객체처럼 동작함
  • 원시값에 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라고 한다.
  • 문자열, 숫자 값에 마침표 표기법으로 접근하면 String.prototype, Number.prototype의 메서드를 상속 받아 사용 가능
  • 문자열, 숫자, 불리언, 심벌 이외의 원시값을 객체처럼 사용하면 에러 발생