자바스크립트 객체는 크게 3개의 객체로 분류할 수 있다.
- 표준 빌트인 객체
- 호스트 객체
- 사용자 정의 객체
자바스크립트는 Object
, String
, Number
, Boolean
, Symbol
, Date
, Math
, RegExp
, Array
, Map/Set
, WeakMap/WeakSet
, Function
, Promise
, Reflect
, Proxy
, JSON
, Error
등 40여 개의 표준 빌트인 객체를 제공
Math
, Reflect
, JSON
을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체
생성자 함수인 표준 빌트인 객체가 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체
Ex.
표준 빌트인 객체 String
을 생성자 함수로서 호출하여 생성한 String 인스턴스의 프로토타입은 String.prototype
const strObj = new String('Lee');
console.log(Object.getPrototypeOf(strObj) === String.prototype); // true
const str = 'hello';
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO
원시값인 문자열, 숫자, 불리언 값의 경우, 이들 원시값에 대해 마치 객체처럼 마침표 표기법으로 접근하면 자바스크립트 엔진이 일시적으로 원시값을 연관된 객체로 변환함
문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라고 한다
문자열에 대해 마침표 표기법으로 접근하면 그 순간 래퍼 객체인 String 생성자 함수의 인스턴스가 생성되고 문자열은 래퍼 객체의 [[StringData]] 내부 슬롯에 할당
이때 문자열 래퍼 객체인 String 생성자 함수의 인스턴스는 String.prototype의 메서드를 상속받아 사용할 수 있음
Infinity
Infinity
프로퍼티는 무한대를 나타내는 숫자 값 Infinity
console.log(window.Infinity === Infinity); // true
console.log(3/0); // Infinity
console.log(-3/0); // -Infinity
console.log(typeof Infinity); // number
NaN
NaN
프로퍼티는 숫자가 아님 (Not-a-Number)을 나타내는 숫자값 NaN
console.log(window.NaN); // NaN
console.log(Number('xzy')); // NaN
console.log(1 * 'string'); // NaN
console.log(typeof NaN); // number
undefined
undefined
프로퍼티는 원시 타입 undefined
console.log(window.undefined); // undefined
var foo;
console.log(foo); // undefined
console.log(typeof undefined); // undefined
eval
eval
함수는 자바스크립트 코드를 나타내는 문자열을 인수로 전달받는다.isFinite
isNaN
NaN
인지 검사하여 그 결과를 불리언 타입으로 반환parseFloat
parseInt
encodeURI
/ decodeURI
encodeURI
함수는 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩decodeURI
함수는 인코딩된 URI를 인수로 전달받아 이스케이프 처리 이전으로 디코딩encodeURIComponent
/ decodeURIComponent
encodeURIComponent
함수는 URI 구성 요소를 인수로 전달받아 인코딩decodeURIComponent
함수는 매개변수로 전달된 URI 구성 요소를 디코딩var x = 10;
function foo () {
y = 20;
}
foo();
console.log(x + y); // 30
console.log(x);
console.log(y);
var x = 10;
function foo () {
y = 20;
}
foo();
console.log(x + y);
var x = 10;
function foo () {
y = 20;
console.log(x + y); // window.y = 20;
}
foo();
console.log(window.x); // 10
console.log(window.y); // 20
delete x; // 전역 변수는 삭제 X
delete y; // 프로퍼티는 삭제
console.log(window.x); // 10
console.log(window.y); // undefined