strict mode는 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다.
전역의 선두 또는 함수 몸체의 선두에 ‘use strict’;
를 추가한다.
전역에 적용한 strict mode는 스크립트 단위로 적용된다.
하지만 strict mode 스크립트와 non-strict mode 스크립트를 혼용하는 것은 오류를 발생시킬 수 있다. 특히 외부 서드파티 라이브러리를 사용하는 경우 라이브러리가 non-strict mode인 경우도 있기 때문이다.
자바스크립트 객체는 크게 3개의 객체로 분류된다.
Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체다.
생성자 함수 객체인 표준 빌트인 객체는 프로토타입 메서드와 정적 메서드를 제공하고, 생성자 함수 객체가 아닌 표준 빌트인 객체는 정적 메서드만 제공한다.
문자열, 숫자 불리언 값에 대해 객체처럼 접근하면 임시 객체가 생성되며, 이를 래퍼 객체라 한다.
원시값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌린다.
래퍼 객체의 처리가 종료되면 식별자가 원시값을 갖도록 되돌리고 래퍼 객체는 가비지 컬렉션의 대상이 된다.
null과 undefined는 래퍼 객체를 생성하지 않는다. (에러 발생)
전역 객체는 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며, 어떤 객체에도 속하지 않은 최상위 객체다.
전역 객체는 자바스크립트 환경에 따라 지칭하는 이름이 다르다. 브라우저 환경에서는 window(또는 self, this, frames), Node.js 환경에서는 global이 전역 객체를 카리킨다.
특징:
변수가 아니라 단지 프로퍼티인 y는 delete 연산자로 삭제할 수 있다. 전역 변수는 프로퍼티이지만 delete 연산자로 삭제할 수 없다.
var x = 10; //전역 변수
function foo(){
//선언하지 않은 식별자에 값을 할당
y = 20;//window.y = 20;
}
foo();
console.log(x + y);
delete x; //전역 변수는 삭제되지 않는다.
delete y; //프로퍼티는 삭제된다.