fffo
빌트인 객체 본문
빌트인 객체
js 객체의 분류
- js 객체는 크게 3개로 분류할 수 있음
- 표준 빌트인 객체(standard built-in / native / global objects)
- ECMAScript 사양에 정의된 객체
- 호스트 객체(host objects)
- ECMAScript 사양에 정의되어 있지 않지만 js 실행환경(브라우저 환경 또는 node.js환경)에서 추가로 제공하는 객체
- 사용자 정의 객체(user-defined objects)
- 사용자가 직접 정의한 객체
- 표준 빌트인 객체(standard built-in / native / global objects)
표준 빌트인 객체
- Math, Reflect, JSON을 제외한 모든 표준 빌트인 객체는 생성자 함수 객체이고 프로토타입 메서드와 정적 메서드를 제공함
- 생성자 함수가 아닌 표준 빌트인 객체는 정적 메서드만 제공함
const numObj = new Number(1.5);
// toFixed : 소수점 자리를 반올림하여 문자열로 반환하는 Number.prototype의 메서드
console.log(numObj.toFixed()); // 2
// isInteger : 인수가 정수인지 검사하여 boolean 값 반환하는 Number의 정적 메서드
console.log(Number.isInteger(numObj)); // false
// console.log(numObj.isInteger(1.5)); // TypeError: numObj.isInteger is not a function
원시값과 래퍼 객체
- 원시값을 객체처럼 접근하면 js엔진이 암묵적으로 연관된 객체를 생성해 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌림
- 원시값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체(wrapper object)라고 함
- 기존의 원시값은 내부 슬롯(문자열을 예로 들면 [[StringData]])에 할당됨
- 래퍼 객체의 처리가 종료되면 래퍼객체의 내부 슬롯에 할당된 원시값으로 식별자를 되돌리고 래퍼 객체는 가비지 컬랙션의 대상이 됨
- 문자열, 숫자, 불리언, 심벌 이외의 원시값(null, undefined)은 래퍼 객체를 생성하지 않음
전역 객체
- 전역 객체 : 코드 실행 이전에 js엔진에 의해 어떤 객체보다도 가장 먼저 생성되는 특수 객체, 어떤 객체에도 속하지 않는 최상위 객체
- 환경에 따라 이름이 달라짐
- 브라우저 : window(self, this, frames)
- Node.js : global
- ES11에서 도입된 globalTHis는 각 환경의 전역변수를 가리키는 다양한 식별자를 통일한 것
- 전역 객체는 표준 빌트인 객체, 호스트 객체, var로 선언한 전역 변수와 전역 함수를 프로퍼티로 가짐
- 전역 객체의 프로퍼티를 참조할 때 전역 객체를 가리키는 식별자를 생략할 수 있음
빌트인 전역 프로퍼티
- Infinity : 무한대를 나타내는 숫자 값 Infinity를 가진 프로퍼티
- NaN : 숫자가 아닌 값을 나타내는 숫자 값 NaN를 가진 프로퍼티
- Number.NaN 프로퍼티와 동일함
- undefined : 원시 타입 undefined를 값으로 갖는 프로퍼티
console.log(window.Infinity === Infinity); // true
console.log(window.NaN); // NaN
console.log(window.undefined === undefined); // true
빌트인 전역 함수
- eval : js 코드를 나타내는 문자열을 인수로 받음. 문자열 코드가 표현식이면 런타임에 평가하여 값을 생성, 표현식이 아닌 문이면 런타임에 실행함.
- 여러 개의 문으로 이루어져 있으면 모든 문을 실행
- eval 함수를 통해 사용자로부터 입력받은 콘텐츠를 실행하는 것은 보안에 매우 취약할 뿐더러 eval함수를 통해 실행되는 코드는 js엔진에 의해 최적화가 수행되지 않으므로 처리속도가 느림 → eval함수 지양
- isFinite : 전달받은 인수를 숫자 타입으로 변환 후 유한수이면 true, 무한수이거나 NaN이면 false 반환
- isNaN : 전달 받은 인수를 숫자 타입으로 변환 후 NaN이면 true, 아니면 false 반환
- parseFloat : 전달받은 문자열 인수를 부동 소수점 숫자로 해석해 반환
- 공백으로 구분된 문자열은 첫 번째 문자열만 반환
- 첫 번째 문자열을 숫자로 변환할 수 없으면 NaN 반환
- 앞 뒤 공백 무시
- parseInt : 전달받은 문자열 인수를 정수로 해석해 반환
- 두 번째 인수로 진법을 나타내는 기수를 전달할 수 있음. 반환 값은 항상 10진수
- 문자열을 순차 탐색하며 해석할 수 없는 수가 나온 문자와 그 이후는 전부 무시됨
- 첫 번째 문자열을 숫자로 변환할 수 없으면 NaN 반환
- 앞 뒤 공백 무시
parseInt('10'); // 10
parseInt('10.123'); // 10
// 11을 2진수로 해석하고 그 결과를 10진수로 반환
parseInt('11',2); // 3
// 11을 16진수로 해석하고 그 결과를 16진수로 반환
parseInt('11',16); // 17
// 2진수에서 '2'는 해석될 수 없음
parseInt('20', 2); // NaN
// 해석할 수 없는 수 이후 문자들은 무시됨
parseInt('1A0', 10); // 1
- encodeURI / decodeURI
- URI : 인터넷에 있는 자원을 나타내는 유일한 주소
- encodeURI : 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩함
- 이스케이프 처리 : 네트워크를 통해 정보를 공유할 때 어떤 시스템에서도 읽을 수 있는 아스키 문자 셋으로 변환하는 것
- decodeURI은 반대로 디코딩시켜줌
- encodeURIComponent / decodeURIComponent
- URI 구성 요소(component)를 인수로 전달받아 인코딩(이스케이프 처리)함
- encodeURI와의 차이점 : 본 함수는 인수로 전달된 문자열을 쿼리 스트링의 일부로 간주해 쿼리 스트링 구분자로 사용되는 =,?, &까지 인코딩하지만 encodeURI는 인수를 완전한 URI전체로 간주해 해당 구분자들을 인코딩하지 않음
암묵적 전역
- 선언되지 않은 식별자에 값을 할당 시 js엔진은 전역 객체에 프로퍼티를 동적으로 생성함
// y는 선언된 적 없음
y = 20; // window.y = 20; 으로 해석되어 전역 객체에 프로퍼티를 동적으로 생성해 할당
- 이는 변수 선언이 아닌 객체의 프로퍼티로의 추가이기 때문에 변수 호이스팅이 발생하지 않음
// console.log(y); // ReferenceError
y = 20;
console.log(y); // 20
- var로 선언된 전역변수는 delete로 삭제할 수 없지만 암묵적 전역으로 선언된 프로퍼티는 delete로삭제 가능
var x = 10;
y = 20;
console.log(window.x); // 10
console.log(window.y); // 20
delete x;
delete y;
console.log(window.x); // 10
console.log(window.y); // undefined
'Programming > Javascript' 카테고리의 다른 글
실행 컨텍스트 (0) | 2021.10.07 |
---|---|
this (0) | 2021.10.06 |
strict mode (0) | 2021.10.04 |
프로토타입 (0) | 2021.10.03 |
함수의 일급 객체 (0) | 2021.10.02 |
Comments