기존 블로그에 작성한 내용을 velog로 이전한 글입니다
전역 객체 : 최상위 객체
표준 빌트인 객체 : ECMAScript 사양에 정의된 객체, 실행환경 무관
호스트 객체 : 실행 환경에서 추가적으로 제공하는 객체
사용자 정의 객체 : 사용자가 정의한 객체
모든 빌트인 객체의 최상위 객체
객체의 계층적 구조 상 표준 빌트인 객체와 호스트 객체를 프로퍼티로 갖는다
특징
전역 객체는 개발자가 의도적으로 만들 수 없다. (생성자 함수 제공X)
전역 객체의 프로퍼티 참조시 window(또는 global) 생략 가능
console.log(window.parseInt === parseInt); // true
전역 프로퍼티 : Infinity, NaN, undefined
전역 함수
eval : 코드를 런타임에 동적으로 평가 및 실행
isFinite : 유한수인지 검사 후 불리언 타입으로 반환
isNaN : 전달 값을 숫자로 타입 변환 후 NaN인지 검사하여 불리언 타입으로 반환
parseFloat : 문자열을 부동소수점 숫자로 바꾼 후 반환
parseInt : 문자열을 정수형 숫자로 해석 후 반환
encodeURI : URI의 문자들을 이스케이프 처리함
decodeURI : 인코딩된 URI을 전달받아 이스케이프 처리되기 이전으로 디코딩
const uri = "http://example.com?name=이웅모&job=programmer&teacher";
// encodeURI 함수는 완전한 URI를 전달받아 인코딩하여 이스케이프 처리한다.
const enc = encodeURI(uri);
console.log(enc);
// http://example.com?name=%EC%9D%B4%EC%9B%85%EB%AA%A8&job=programmer&teacher
// decodeURI 함수는 인코딩된 완전한 URI를 전달받아 이스케이프 처리되기 이전으로 디코딩한다.
const dec = decodeURI(enc);
console.log(dec);
// http://example.com?name=이웅모&job=programmer&teacher
encodeURIComponent :
URI의 구성요소인 쿼리 파라미터의 일부 간주하고 쿼리 파라미터 구분자로 사용되는 =, ?, &를 인코딩한다
decodeURIComponent :
쿼리 파라미터 일부를 다시 디코딩한다
// URI의 쿼리 파라미터
const uriComp = "name=이웅모&job=programmer&teacher";
// encodeURIComponent 함수는 매개변수로 전달된 문자열을 URI의 구성요소인 쿼리 파라미터의 일부 간주한다.
// 따라서 쿼리 파라미터 구분자로 사용되는 =, ?, &를 인코딩한다.
let enc = encodeURIComponent(uriComp);
console.log(enc);
// name%3D%EC%9D%B4%EC%9B%85%EB%AA%A8%26job%3Dprogrammer%26teacher
let dec = decodeURIComponent(enc);
console.log(dec);
// 이웅모&job=programmer&teacher
암묵적 전역
스코프 체인을 통해 선언된 변수를 찾을 수 없을 때 window.변수=할당값
으로 해석하여 전역변수처럼 동작하는 것
단 변수가 아니기 때문에 호이스팅이 발생하지 않고 delete 삭제할 수 있다
// 전역 변수 x는 호이스팅이 발생한다.
console.log(x); // undefined
// 전역 변수가 아니라 단지 전역 객체의 프로퍼티인 y는 호이스팅이 발생하지 않는다.
console.log(y); // ReferenceError: y is not defined
var x = 10; // 전역 변수
function foo() {
y = 20; // 선언하지 않은 식별자에 값을 할당
console.log(x + y);
}
foo(); // 30
// 선언하지 않은 식별자 y를 전역에서 참조할 수 있다.
console.log(x + y); // 30
console.log(window.x); // 10
console.log(window.y); // 20
delete x; // 전역 변수는 삭제되지 않는다.
delete y; // 프로퍼티는 삭제된다.
console.log(window.x); // 10
console.log(window.y); // undefined
생성자 함수 객체: String, Number, Boolean, Function, Array, Date 등
생성자 함수가 아닌 객체: Math, Reflect, JSON
래퍼 객체
문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체
래퍼 객체의 처리 종료 후 원시값을 되돌리고 가비지 컬렉션 대상이 된다
const str = "hi";
// 원시 타입인 문자열이 레퍼 객체인 String 인스턴스로 변환된다.
console.log(str.length); // 2
console.log(str.toUpperCase()); // HI
// 레퍼 객체로 프로퍼티 접근이나 메소드 호출한 후, 다시 원시값으로 되돌린다.
console.log(typeof str); // string