생성자 함수(constructor)란, new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수를 말한다. 생성자 함수에 의해 생성된 객체를 인스턴스라고 한다.
new Object를 호출하면 빈 객체를 생성하여 반환하는데, 이후 프로퍼티 또는 메서드를 추가하여 객체를 완성하면 된다.
Date는 생성자 함수이다.
즉, new Date로 객체를 생성하면, 우리는 Date 객체가 가지고 있는 기본적인 정보들을 모두 가져다 사용할 수 있다.
인자 없이 new Date();를 생성하면, 정해진 형식에 따라 현재 날짜와 시간을 가지는 Date 객체를 반환한다.
new Date(); // -> Mon Jul 06 2020 01:03:18 GMT+0900 (대한민국 표준시)
new 없이 그냥 Date();를 호출하면, 객체를 반환하는게 아니라 현재 날짜와 시간 정보가 담긴 "문자열"만 반환한다.
Date(); // -> 'Mon Jul 06 2020 01:03:18 GMT+0900 (대한민국 표준시)'
따라서 new로 생성해야 Date 객체가 가진 여러 프로토타입 메서드를 사용하는 것이 가능하다.
new Date가 받는 인수로는,
new Date(86400000); -> Fri Jan 02 1970 09:00:00 GMT+0900 (대한민국 표준시)
new Date('May 26, 2020 10:00:00');
new Date('2020/03/26/10:00:00');
new Date(2020, 2);
new Date(2020, 2, 26, 10, 00, 00, 0);
Date 객체가 가지고 있는 prototype 메서드를 호출하기 위해서는, 반드시 Date 생성자 함수로 Date 객체의 인스턴스 만들기(new Object로 생성)가 선행되어야 한다.
Date 객체가 가지고 있는 유용한 메서드가 많이 있으니, 사용법을 잘 익혀둘 것.
더 알아보기
const nowDate = Date.now();
const nowTime = new Date().getTime();
위의 결과는 완전히 동일하다. 기준인 1970년 1월 1일 00:00:00(UTC)부터 현재까지 몇 밀리초가 지났는지를 반환한다.
단, 날짜를 인수로 받을 경우 같은 결과를 받으려면, Date.parse 메서드를 사용해야 한다.
const otherDate = Date.parse('2020/3');
const otherTime = new Date(2020, 2).getTime();
기준시로부터 인수로 받은 날짜까지 몇 밀리초가 지났는지 결과값을 얻을 수 있으며, 이 때 Date.parse의 인수는 반드시 String 형식이어야 한다.