✏️ n일 전 '일' 출력하기
date를 기준으로 days일 전 '일’을 반환하는 함수 getDateAgo(date, days)를 만들어보세요,
오늘이 20일이라면 getDateAgo(new Date(), 1)는 19를, getDateAgo(new Date(), 2)는 18을 반환해야 합니다.
days가 365일 때도 제대로 동작해야 합니다.
let date = new Date(2015, 0, 2); // 2015년 1월 2일
alert( getDateAgo(date, 1) ); // 1, (2015년 1월 1일)
alert( getDateAgo(date, 2) ); // 31, (2014년 12월 31일)
alert( getDateAgo(date, 365) ); // 2, (2014년 1월 2일)
주의: 함수는 date를 변경하지 않아야 합니다.
➡️
let date = new Date(2015, 0, 2);
function getDateAge(date, days) {
console.log(date);
let newDate = date;
newDate.setDate(newDate.getDate() - days);
console.log(newDate.getDate());
return newDate.getDate();
}
console.log(getDateAge(date, 1));
뭔가 처음에 생각한대로 쓰는데 잘 안나와서 한줄 한줄 콘솔에 찍으면서 푸니까 점점 수월해졌다!!
✏️ 달의 마지막 일
특정 달의 마지막 일을 반환하는 함수 getLastDayOfMonth(year, month)를 작성해보세요. 반환 값은 30이나 31, 29(2월), 28(2월)이 될 겁니다.
매개변수:
getLastDayOfMonth(2012, 1) = 29
➡️
function getLastDayOfMonth(year, month) {
let date = new Date(year, month + 1, 0);
console.log(date);
console.log(date.getDate());
}
왜 1을 더해야하는지 , 0을 붙여하는지!
기본값이 1 이라 0을 안붙이면, 자동으로 달의 1일로 지정
그래서, 0을 넘기면, 첫번째 일의 1일 전 === 이전 달의 마지막일
이건 어렵다!!
✏️ 몇 초나 지났을까요?
오늘 하루가 시작된 이후 몇 초나 지났는지 반환하는 함수 getSecondsToday()를 만들어보세요.
현재 시각이 10:00 am이고, 서머타임이 적용되지 않은 경우라면 아래와 같은 결과가 나와야 합니다.
getSecondsToday() == 36000 // (3600 * 10)
주의: 어떤 날이든 함수를 호출했을 때, 원하는 결과가 반환되어야 합니다. '오늘’을 나타내는 값을 하드 코딩하지 마세요.
➡️
function getSecondsToday() {
let date = new Date();
console.log(date);
console.log(date.getHours() * 3600);
console.log(date.getMinutes() * 60);
console.log(date.getMinutes());
return date.getHours() * 3600 + date.getMinutes() * 60 + date.getMinutes();
}
getSecondsToday();
역시 콘솔로 찍으면서 해보기!!
JSON.stringify
– 객체를 JSON으로 바꿔줍니다.
JSON.parse
– JSON을 객체로 바꿔줍니다.
✏️ 객체를 JSON으로 바꾼 후 다시 객체로 바꾸기
user를 JSON 형태의 문자열로 바꾼 다음 이를 다시 객체로 바꾼 후 제2의 변수에 저장해보세요.
let user = {
name: "John Smith",
age: 35
};
➡️
let userJson = JSON.stringify(user);
console.log(userJson);
// 문자열
let userJsonParse = JSON.parse(userJson);
console.log(userJsonParse);
//다시 객체
✏️ 역참조 배제하기
순환 참조가 있는 경우 프로퍼티 이름을 사용해 순환 참조를 만드는 프로퍼티를 직렬화에서 배제할 수 있습니다.
그런데 이 프로퍼티가 순환참조도 만들면서 일반 프로퍼티 역할을 하는 경우라면 단순히 이런 식으로 직렬화에서 배제할 수 없습니다. 이럴 땐 값을 이용해 해당 프로퍼티를 확인할 수밖에 없습니다.
meetup을 참조하는 프로퍼티를 제외한 모든 프로퍼티를 직렬화해주는 replacer 함수를 작성해보세요.
let room = {
number: 23
};
let meetup = {
title: "Conference",
occupiedBy: [{name: "John"}, {name: "Alice"}],
place: room
};
// 순환 참조
room.occupiedBy = meetup;
meetup.self = meetup;
alert( JSON.stringify(meetup, function replacer(key, value) {
/* 코드를 작성할 곳 */
return (key != "" && value == meetup) ? undefined : value;
}));
/* 얼럿창엔 아래와 같은 결과가 출력되어야 합니다.
{
"title":"Conference",
"occupiedBy":[{"name":"John"},{"name":"Alice"}],
"place":{"number":23}
}
*/
💬 오늘의 느낀점
JSON 형식으로 만들거나 다시 객체로 만드는 것은 이해를 했다!!
그치만 순환참조 부분을 잘 모르겠다..
붙잡고 있다가는 끝이 안날 거 같아서 일단 위에 내용에 추가로 설명이 잘 되어있는 것을 찾아서 다시 하는거로..