자바스크립트에서 빌트인 객체란 ECMAScript 사양에 정의된 객체를 말하며, 애플리케이션 전역의 공통 기능을 제공합니다.
자바스크립트 실행 환경(브라우저 또는 Node.js 환경)과 관계없이 언제나 사용할 수 있습니다.
* 표준 빌트인 객체
- 자바스크립트는 Object, String, Number, Boolean, Symbol, Date, Math 등 40여 개의 표준 빌트인 객체를 제공합니다.
const strObj = new String('Lee'); // String { "Lee" }
console.log(typeof strObj);
const numObj = new Number(123);
console.log(typeof numObj);
const boolObj = new Boolean(true);
console.log(typeof boolObj);
const func = new Function('x', 'return x + x');
console.log(typeof func);
const arr = new Array(1, 2, 3);
console.log(typeof arr);
const regExp = new RegExp(/ab+c/i);
console.log(typeof regExp);
const date = new Date();
console.log(typeof date);
- 표준 빌트인 객체인 Number의 prototype 프로퍼티에 바인딩된 객체, Number.prototype은 다양한 기능의 빌트인 프로토타입 메서드를 제공합니다.
const numObj = new Number(1.5); // Number {1.5}
// toFixed는 Number.prototype의 프로토타입 메서드입니다.
// Number.prototype.toFixed는 소수점 자리를 반올림하여 문자열로 반환합니다.
console.log(numObj.toFixed());
// isInteger는 Number의 정적 메소드입니다.
// Number.isInteger는 인수가 정수(integer)인지 검사하여 그 결과를 Boolean으로 반환합니다.
console.log(Number.isInteger(0.5));
* 원시값과 래퍼 객체
- 문자열이나 숫자, 불리언 등의 원시값이 있는데도 String, Number, Boolean 등의 표준 빌트인 생성자 함수가 존재하는 이유는 무엇일까요?
- 다음 예제를 살펴보면 알 수 있습니다.
- 원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없는데도 원시값인 문자열이 마치 객체처럼 동작합니다.
- 원시값인 문자열, 숫자, 불리언 값의 경우 원시값에 대해 마치 객체처럼 마침표 표기법으로 접근하면 자바스크립트 엔진이 일시적으로 원시값을 연관된 객체로 변환해 주기 때문입니다.
const str = 'hello';
console.log(str.length); // 5
console.log(str.toUpperCase()); // Hello
이런식으로 문자열 래퍼 객체가 생성되고, 객체의 처리가 종료되면 래퍼 객체는 가비지 컬렉션의 대상이 됩니다.
* 전역 객체
- 전역 객체는 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체입니다.
어떤 객체에도 속하지 않는 최상위 객체입니다.
- 브라우저에서는 window, node에서는 global입니다.
- 전역객체는 개발자가 의도적으로 생성할 수 없고, 전역 객체를 생성할 수 있는 생성자 함수가 제공되지 않습니다.
- 전역 객체의 프로퍼티를 참조할 때 window 또는 global를 생략할 수 있습니다.
- let이나 const 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아닙니다.
* 빌트인 전역 프로퍼티
- Infinity 프로퍼티 : 무한대를 나타내는 숫자값 Infinity를 가집니다.
console.log(Infinity); // Infinity
console.log(3/0); // Infinity
console.log(-3/0); // -Infinity
console.log(typeof Infinity); // number
- NaN 프로퍼티 : 숫자가 아님(Not-a-Number)을 나타내는 숫자값 NaN을 갖습니다.
console.log(NaN); // NaN
console.log(Number('xyz')); // NaN
- undefined : 원시 타입 undefined 값으로 갖습니다.
* 빌트인 전역 함수
- isFinite : 전달받은 인수가 정상적인 유한수인지 검사하여 유한수이면 true를 반환하고, 무한수이면 false를 반환합니다. 전달받은 인수의 타입이 숫자가 아닌 경우, 숫자로 타입을 변환한 후 검사를 수행합니다.
isFinite(0); // true
isFinite(2e64); // true
isFinite('10'); // true: '10' -> 10
isFinite(null); // true: null -> 0
isFinite(Infinity); // false
isFinite(-Infinity); // false
isFinite(NaN); // false
isFinite('Hello'); // false
isFinite('2005/12/12'); // false
- isNaN : 전달받은 인수가 NaN인지 검사하여 그 결과를 불리언 타입으로 반환합니다.
isNaN(NaN); // true
isNaN(10); // false
isNaN('blabla'); // true
isNaN('10'); // false
isNaN('10.12'); // false
isNaN(''); // false
isNaN(' '); // false
isNaN(true); // false
- parseFloat : 전달받은 문자열 인수를 부동 소수점 숫자, 즉 실수로 해석하여 반환합니다.
/**
@param {string} string - 변환 대상 값
@returns {number} 변환 결과
**/
console.log(parseFloat('3.14'));
console.log(parseFloat('10.00'));
console.log(parseFloat('34 45 66'));
console.log(parseFloat('40 years'));
console.log(parseFloat('He was 40'));
- parseInt : 전달받은 문자열 인수를 정수로 해석하여 반환합니다.
/**
@param {string} string - 변환 대상 값
@param {number} [radix] - 진법을 나타내는 기수(2 - 36, 기본값 10)
@returns {number} 변환 결과
*/
console.log(parseInt('10')); // 10
console.log(parseInt('10.123')); // 10
두번째 인수로 진법을 나타내는 기수(2 - 36)를 전달할 수 있습니다.
parseInt는 무조건 10진수로 변환합니다.
console.log(parseInt('10'));
console.log(parseInt('10', 2));
console.log(parseInt('10', 8));
console.log(parseInt('10', 16));
'자바스크립트' 카테고리의 다른 글
webpack 살펴보기 - (1) 정의와 사용하는 이유 (0) | 2021.11.28 |
---|---|
프론트엔드 - webpack 설정하기 (0) | 2021.09.04 |
프론트엔드 - Babel을 이해하고 적용해보자!(트랜스파일러) (0) | 2021.09.01 |
자바스크립트(JavaScript) - 정규표현식 (0) | 2021.07.24 |
자바스크립트(JavaScript) - 객체와 객체 리터럴 (0) | 2021.06.24 |