자바스크립트 객체의 분류
•
표준 빌트인 객체: ECMAScript 사양에 정의된 객체이며, 애플레케이션 전역의 공통 기능을 제공한다.
•
호스트 객체: JS실행환경 (브라우저 환경에선 WebApi or Node.js 환경에선 Node.js고유 API)에서 추가로 제공되는 객체
•
사용자 정의 객체: 사용자가 직접 정의한 객체
표준 빌트인 객체
•
Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, 등등의 표준 빌트인 객체가 존재
원시값과 래퍼 객체
const str = 'hello';
// 원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작한다.
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO
JavaScript
복사
래퍼 객체 : 문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체
래퍼 객체로 프로퍼티에 접근하거나 메서드를 호출한 후, 다시 원시값으로 전환
--> Number인 숫자 값도 마찬가지로 래퍼 객체로 프로퍼티 메서드 접근 가능
전역 객체
•
JS엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체
◦
브라우저 --> window
◦
Node.js --> global
•
ECMASCript 표준사양으로 globalThis라는 전역 객체를 가리키는 통일 식별자가 나옴.
•
전역 객체는 표준 빌트인 객체와 호스트 객체, var키워드로 선언한 전역 변수와 전역 함수를 프로퍼티로 소유
•
전역 객체 자신은 어떤 객체의 프로퍼티도 아니며 객체의 계층적 구조상 어떤 객체에도 속하지 않는, 최상위 객체
빌트인 전역 프로퍼티
•
Infinity(무한대)
•
NaN(숫자가 아님을 나타냄)
•
undefined
빌트인 전역 함수
•
eval (사용금지)
◦
eval함수는 기존의 스코프를 런타임에 동적으로 수정
◦
'use strict'나 const, let을 사용하면 기존스코프를 수정하지 않고 eval함수 자체적인 스코프를 생성
◦
보안에 매우 취약하여 eval함수는 사용 금지
•
isFinite: 유한수인지 판별
•
isNaN: 전달받은 인수가 NaN인지 판별
•
parseFloat: 문자열을 실수로 해석하여 반환
•
parseInt: 문자열을 정수로 해석하여 반환
•
encodeURI / decodeURI : 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩
◦
(알파벳, 0~9숫자, 일부 특수문자는 이스케이프 처리에서 제외)
◦
%, ?, # 은 의미를 갖고 있는 문자여서 처리
•
encodeURIComponent / decodeURIComponent : 쿼리스트링 구분자로 사용되는 =, ?, & 까지 인코딩
암묵적 전역
var x = 10;
function foo() {
// 선언하지 않은 식별자에 값 할당
y = 20;
}
foo();
// 선언하지 않은 식별자를 전역에서 참조 가능
console.log(x + y); // 30
JavaScript
복사
암묵적 전역 : y는 마치 선언된 전역변수 처럼 동작.
JS엔진인 window.y = 20으로 해석하기 때문에 전역 객체에 프로퍼티를 동적 생성.
•
이러한 경우 변수가 아닌 프로퍼티로 추가되었기 때문에 변수 호이스팅이 발생하지 않고
•
(선언 전 y참조시 ReferenceError) delete로 프로퍼티를 삭제하는 것과 같이 삭제 가능