JavaScript

[DeepDive] - 20장(strict mode), 21장(빌트인 객체) 필요 내용 정리

strict mode

  • ES5부터 도입된 기능으로, JS 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 JS 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 에러를 발생시킨다.
    1. 암묵적 전역: 선언하지 않은 변수를 참조할시, ReferenceError 발생
    2. 변수, 함수, 매개변수의 삭제: delete 연산자로 변수, 함수, 매개변수 삭제시 SyntaxError 발생
    3. 매개변수 이름 중복: 중복된 매개변수 이름 사용시 SyntaxError 발생
    4. with 문의 사용: 전달된 객체를 스코프체인에 추가하지만, 성능과 가독성이 나쁘므로 사용하지 않는것을 권장
  • strict mode를 적용하기 위해서, 전역의 선두 혹은 함수 몸체의 선두에 use strict; text를 추가한다.
// test.js
// strict mode 적용
"use strict"
  • 전역 및 함수단위로 strict mode를 적용하는 것을 피하는 것을 권장한다.
    • 전역: 해당 스크립트에 한정되어 사용되긴 하지만, strict, non-strict 혼용은 오류를 발생 가능성 존재, 함수 또한 strict, none-strict의 혼용은 바람직하지 않음 => 즉시 실행 함수로 스크립트 전체를 감싸 스코프 구분 후 즉시실행 함수 선두에 strict mode 적용

 

빌트인 객체

  • JS는 Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array등 약 40여 개의 표준 빌트인 객체를 제공
  • Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체
  • 생성자 함수 객체이면서 표준 빌트인 객체는 프로토타입 메서드와 정적 메서드 제공, 생성자 함수 객체가 아닌 표진 빌트인 객체는 정적 메서드만 제공
  • 프로토타입 메서드: 인스턴스를 통해서만 호출이 가능한 메서드
    정적 메서드: 인스턴스에서 호출이 불가능(인스턴스 참조X), 클래스를 통해서만 호출이 가능

래퍼 객체

  • string, number, boolean 등의 원시형 데이터에 객체처럼 접근할시 생성되는 임시 객체
  • 원시값을 객체처럼 사용할 시 JS 엔진은 암묵적으로 연관된 객체 생성하며, 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 복구

암묵적 전역

var x = 10; // 전역 변수

function foo() {
  // 선언하지 않은 식별자에 값을 할당 => 전역 변수처럼 동작
  y = 10;
}
foo();

console.log(x + y) // 20 

console.log(global.y) // 10 
  • 위 예시처럼, 변수명의 선언 없이 y = 10 처럼 값을 할당하였을때, y는 마치 선언된 전역 변수처럼 동작을 하게 되는데 이러한 현상을 암묵적 전역이라고 한다. (y는 전역 객체의 프로퍼티로 동적 생성)
  • 편수 선언 없이, 단순 전역 객체의 프로퍼티로 추가되었기 때문에 호이스팅이 발생하지 않는다.
  • delete 키워드로 삭제가 가능하다.