본 시리즈는 모던 자바스크립트 Deep Dive 책을 참고하여 작성하고 있습니다.
strict mode는 전역의 선두나 함수 몸체의 선두에 'use strict';
를 추가하여 적용할 수 있다. strict mode는 ES5부터 추가되었다. strict mode를 적용하면 자바스크립트 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 최적화에 문제가 생길 수 있는 코드에 대해 오류를 발생시킨다.
ESLint와 같은 린트 도구를 사용해서 유사한 효과를 얻을 수 있다. 린트 도구는 정적 분석 기능을 통해 소스 코드를 스캔하여 문법적 오류와 잠재적 오류를 찾아내고 오류의 원인을 리포팅해준다. 또한 코딩 컨벤션을 원하는 대로 설정하고 강제할 수 있다.
strict mode를 전역이나 함수 단위로 적용하는 것은 좋지 않다. 전역에 적용할 경우, strict mode는 스크립트 단위로 적용되므로 strict mode와 non-strict mode를 혼용하게 될 수도 있다. 이럴 경우 오류가 발생할 수 있어 좋지 않다.
함수 단위로 적용할 경우, 어떤 함수에는 strict mode를 적용하고 어떤 함수에는 strict mode를 적용하지 않는 것은 올바르지 않다. 그렇다고 모든 함수에 일일이 strict mode를 적용하는 것도 번거롭다. strict mode가 적용된 함수의 외부 함수가 strict mode가 아니면 문제가 발생할 수도 있다.
따라서 strict mode를 적용할 때에는 즉시 실행 함수로 감싸는 것이 좋다.
(function() {
'use strict';
// ...
}());
const obj = { x: 1 };
with (obj) {
console.log(x); // with문 안에서는 객체 이름을 생략하고 프로퍼티를 바로 사용할 수 있다
}
DOM, BOM, Canvas, XMLHttpRequest, fetch, SVG, Web Storage, Web Component, ...
등 Web APIObject, Srting, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, WeakMap/WeakSet, Function, Promise, Reflect, Proxy, JSON, Error
등.. 40여 개의 표준 빌트인 객체가 제공된다.
Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 생성자 함수 객체로, 인스턴스를 생성할 수 있다.
정적 메서드는 인스턴스 없이도 호출이 가능하다.
문자열, 숫자, 불리언 등 원시값이 있는데도 문자열, 숫자, 불리언을 생성하는 String, Number, Boolean 빌트인 생성자 함수가 존재한다. 이 빌트인 생성자 함수들은 원시값이 객체처럼 동작할 수 있게 도와준다. 즉, 원래 원시값은 프로퍼티나 메서드를 가질 수 없는데, 원시값을 감싸서 아래 예시처럼 원시값이 프로퍼티와 메서드를 가지는 등 객체처럼 동작하게 한다.
const str = "string";
console.log(str.length);
console.log(str.toUpperCase());
원시값에 객체처럼 마침표 표기법으로 접근하면, 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 원시값을 연관된 객체로 변환해 준다. 생성된 객체의 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌린다. 이 때 생성되는 임시 객체를 래퍼 객체라고 한다. 원래 원시값은 래퍼 객체의 내부 슬롯에 할당된다. 그 후 래퍼 객체는 가비지 컬렉션 대상이 된다.
전역 객체는 코드가 실행되기 이전 시점에 어떤 객체보다도 먼저 생성되는 객체이며, 어떤 객체에도 속하지 않는 최상위 객체이다. 최상위 객체라는 것은 프로토타입 체인 상의 최상위라는 것이 아니라, 모든 빌트인 객체를 프로퍼티로 가지고 있다는 것을 의미한다. 브라우저 환경에서는 window
, node.js 환경에서는 global
이 전역 객체를 가리키며 ES11부터는 globalThis
로 어떤 환경에서든 전역 객체에 접근할 수 있다.
전역객체가 가지는 프로퍼티
전역 객체의 특징
var x = 10;
function foo() {
y = 20; // 암묵적 전역 발생
}
console.log(x + y); // ?
선언하지 않은 식별자는 전역 객체의 프로퍼티처럼 행동한다. 따라서 y = 20
이 실행될 때, 자바스크립트 엔진은 동적으로 전역 객체에 y라는 프로퍼티를 추가한 후 값을 할당한다. 따라서 아래 x + y
를 수행할 때 y는 window.y
가 된다. 이러한 현상을 암묵적 전역이라고 한다.
delete y
연산자로 삭제할 수 있다. x는 전역 변수이므로 delete x
로 삭제가 불가능하다.Infinity
NaN
undefined
eval
eval(’1 + 2;’) // 3
undefined
를 반환한다.isFinite
isNaN
parseFloat
parseInt
parseInt(’10’, 8);
encodeURI / decodeURI
%EB%82%B4%EC%9D%BC+%EB%82%A0%EC%94%A8
encodeURIComponent / decodeURIComponent
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EB%82%B4%EC%9D%BC+%EB%82%A0%EC%94%A8
← 이 주소에서, ?
뒤에 오는 문자열