자바스크립트는 크게 3개의 객체로 나뉜다
1.네이티브 객체 = 빌트인객체 = 글로벌 객체
- Native objects = Built-in objects = Global Objects
- ECMAScript 명세에 정의된 객체를 말한다.
- 애플리케이션 전역의 공통 기능 제공
Object, String, Number, Function, Array, RegExp, Date, Math 등
- 객체 생성에 관계가 있는 함수 객체와 메서드로 구성
- 네이티브 객체를 Global Object라고 부르는데 이것은 전역객체 (Global Object)와 다른의미로 사용되므로 혼동에 주의하자
1.종류
💡Object
Object() 생성자 함수
는 객체를 생성한다.
💡Function
- 자바스크립트의 모든 함수는 Function의 객체이다
- 다른 모든 객체들처럼 Function객체는 new 연산자를 사용해 생성할 수 있다.
💡Math
- Math 프로퍼티
Math.PI
: 원주율 PI 값(π ≈ 3.141592653589793)
- Math 메서드
console.log(Math.abs(-10));
console.log(Math.ceil(1.4));
console.log(Math.floor(1.4));
console.log(Math.round(1.4));
console.log(Math.round(1.7));
console.log(Math.trunc(1.5432));
console.log(Math.max(1, 3, 4));
console.log(Math.min(1, 3, 4));
console.log(3 ** 2);
console.log(Math.pow(3, 2));
console.log(Math.sqrt(9));
console.log(Math.random());
console.log(Math.floor(Math.random() * 10 + 1));
💡Date
- 날짜와 시간(년,월,일,시,분,초,밀리초)을 위한 메소드 를 제공하는 빌트인 객체이면서 생성자 함수
- 생성자 함수로 생성한 Date객체는 내부적으로 숫자값을 갖는다
: UTC(1970년 1월 1일 00:00)기점으로 현재 시간까지의 밀리초
- KST는 UTC/GMT 9시간을 더한 시간
- Date 생성자 함수
- 날짜와 시간을 가지는 인스턴스 생성
- 생성된 인스턴스는 기본적으로 현재 날짜 시간을 나타냄
다른 날짜와 시간을 다루고싶다면 인수로 지정한다.
- 주의: 0부터 시작, 0 = 1월
- 4가지 방법
1 ) new Date()
2 ) new Date(dateString)
3 ) new Date(year, month[, day, hour, minute, second, millisecond])
4 ) new 연산자없이 호출
let date = new Date(2019, 4);
console.log(date);
date = new Date('2019/5/16/17:24:30:10');
console.log(date);
console.log(Date.now());
console.log(Date.parse('2022-12-17T03:24:00'));
const now = new Date();
now.setFullYear(2023);
now.setMonth(0);
console.log(now.getFullYear());
console.log(now.getDate());
console.log(now.getDay());
console.log(now.getTime());
console.log(now);
console.log(now.toString());
console.log(now.toDateString());
console.log(now.toTimeString());
console.log(now.toISOString());
console.log(now.toLocaleString('en-US'));
console.log(now.toLocaleString('ko-KR'));
💡RegExp
💡Array
💡Error
- Error 생성자는 error 객체를 생성한다.
- error 객체의 인스턴스는 런타임 에러가 발생하였을 때 throw된다.
try {
throw new Error('Whoops!');
} catch (e) {
console.log(e.name + ': ' + e.message);
}
래퍼 (Wrapper) 객체
- 원시값 을 필요에 따라서 관련된 빌트인 객체(네이티브 객체)로 변환
Number,String,Bollean,Symbol
💡원시값이 어떻게 메서드를 호출하냐
- 원시타입의 메서드를 호출하면
1 ) 순간적으로 원시타입에 해당하는 객체
가 생성되고,
2 ) 이 객체
의 메서드
가 호출된다.
3 ) 메서드
처리가 끝나면 객체
는 사라지고,
4 ) 원래의 원시타입만 남는다.
- 순간적으로 생성되었다 사라지는 객체를 ' 래퍼 객체 ' 라고 한다.
💡그럼 애초에 객체로 생성하면 되는거잖아 ! 그건 아니야. 💩
- 일단 객체는 다양한 프로퍼티, 메서드를 갖고 있으므로 무겁고 느려짐
- 원시타입은 가볍고 빠르지만 값 하나 뿐임
- 해결책으로 메서드를 호출할때만 잠깐 객체로 바꾸고 볼일 끝나면 다시 원시타입으로 복귀해
- 원시타입의 가벼움은 유지, 객체의 유용한 기능도 유지
const number = 123;
console.log(number.toString());
💡string ✨✨✨✨
- string 생성자 함수
- string 프로퍼티
const str2 = '안녕하세요!';
console.log(str2.length);
- string 메서드
- string 객체의 모든 메소드는 언제나 새로운 문자열을 반환한다
문자열은 변경불가능(immutable)한 원시 값이기 때문
const textObj = new String('Hello World!');
const text = 'Hello World!';
console.log(textObj);
console.log(text);
console.log(text.length);
console.log(text[0]);
console.log(text[1]);
console.log(text[2]);
console.log(text.charAt(0));
console.log(text.charAt(1));
console.log(text.charAt(2));
console.log(text.indexOf('l'));
console.log(text.lastIndexOf('l'));
console.log(text.includes('tx'));
console.log(text.includes('h'));
console.log(text.includes('H'));
console.log(text.startsWith('He'));
console.log(text.endsWith('!'));
console.log(text.toUpperCase());
console.log(text.toLowerCase());
console.log(text.substring(0, 2));
console.log(text.slice(2));
console.log(text.slice(-2));
const space = ' space ';
console.log(space.trim());
const longText = 'Get to the, point';
console.log(longText.split(' '));
console.log(longText.split(', ', 2));
💡Number
- Number 생성자 함수
- Number객체 생성 :
new Number(value);
- new 연산자를 붙이지 않아 생성자로 사용하지 않으면
Number 객체를 반환하지 않고 원시 타입 숫자를 반환한다
new Number(value);
var x = Number('123');
console.log(typeof x, x);
- Number 프로퍼티
- 정적(static) 프로퍼티로 Number 객체를 생성할 필요없다.
Number.propertyName
Number.MAX_VALUE
Number.MIN_VALUE
Number.MAX_SAFE_INTEGER
Number.MIN_SAFE_INTEGER
Number.NaN
Number.NEGATIVE_INFINITY
Number.POSITIVE_INFINITY
- Number 메소드
Number.isNaN(testValue)
- Number.isNaN() !== 전역함수 isNaN()
전역함수 isNaN() : 인수를 숫자로 변환 검사 수행
Number.isNaN() : 숫자가 아닌 인수는 언제나 false
Number.isNaN(testValue)
Number.isNaN('37');
const num3 = 102;
console.log(num3.toExponential());
const num4 = 1234.12;
console.log(num4.toFixed());
console.log(num4.toString());
console.log(num4.toLocaleString());
console.log(num4.toPrecision(5));
console.log(num4.toPrecision(4));
console.log(num4.toPrecision(2));
if (Number.EPSILON > 0 && Number.EPSILON < 1) {
console.log(Number.EPSILON);
}
const num = 0.1 + 0.2 - 0.2;
console.log(num);
function isEqual(original, expected) {
return Math.abs(original - expected) < Number.EPSILON;
}
console.log(isEqual(1, 1));
console.log(isEqual(0.1, 0.1));
console.log(isEqual(num, 0.1));
💡Boolean
- Boolean 생성자 함수
- new Boolean(value);
- Falshy
0, -0, null, NaN, undefined, ''
- Truthy
1, -1, '0', 'false', [], {}
var foo = new Boolean(true);
var foo = new Boolean('false');
var foo = new Boolean(false);
- Boolean객체와 boolean 원시 타입을 혼동하기 쉽다.
- Boolean객체는 true/false를 포함하는 객체임!
var x = new Boolean(false);
if (x) {
}
2. 호스트 객체
2.종류
💡전역객체
- 전역 객체는 모든 객체의 유일한 최상위 객체를 의미하며
- 일반적으로 Browser-side에서는 window 객체
- Server-side(Node.js)에서는 global 객체
💡BOM ( Browser Object Model )
- 브라우저 객체 모델은 브라우저 탭, 창의 모델을 생성한다.
- 최상위 window객체는 브라우저의 창 또는 탭을 표현

💡DOM ( Document Object Model )
- 문서 객체 모델은 현재 웹페이지의 모델을 생성
- 최상위 document 객체는 전체 문서로 표현

참고