[TIL] 05. Javascript 4

Danbi Cho·2020년 3월 29일
0

TIL

목록 보기
5/20

1. String <-> Number

자바스크립트가 다른 언어와 다른 특징 중 하나가 데이터 타입을 신경쓰지 않는다는 것

let a = 10;
a = "나는 String인데..";
console.log(a);

Javascript에서는 결과가 잘 나오지만 Java나 C언어 등에서는 에러가 난다.
다른 언어에서는 변수에 어떤 값을 할당하여 변수의 type이 정해지면 그 후에 다른 type의 값을 할당할 수 없기 때문이다.

// console.log('200'+'10'); // 20010
// console.log('200'-'10'); // 190
// console.log(200+'11'); // 20011
// console.log('200'+11); // 20011
// console.log('200'-'안녕'); // NaN

+는 숫자끼리의 더하기와 String끼리 문자를 연결할 수 있다. (+의 양쪽을 보고, 하나라도 String이 있으면 문자열로 합쳐준다)
-는 문자열을 뺄 수 없기 때문에 양쪽을 숫자로 인식하고 빼기가 된다.
NaN은 Not a number / 계산이 불가능하고 이상한 답이 나왔다는 뜻

Number함수

Number 함수를 사용하여 String에서 Number형으로 전환 가능

var birthYearInput = "2000";
console.log(typeof birthYearInput); // string
var numberBirthYear = Number(birthYearInput);
console.log(typeof numberBirthYear); // number

Number 함수 외에도 parseInt, parseFloat 등이 있다.

parseInt("1.901"); // 1
parseFloat("1.901"); // 1.901
Number("1.901"); // 1.901
parseInt("200") + 1; // 201

Number형에서 String형으로 변환하고 싶을 수도 있다.

var numberAsNumber = 1234; 
var numberAsString = numberAsNumber.toString();
console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);

+ 연산의 특성을 이용해서 아래와 같이 변환할 수 있다.

var numberAsNumber = 1234; 
var numberAsString = 1234 + "";
console.log(numberAsNumber, typeof numberAsNumber); // 1234 'number'
console.log(numberAsString, typeof numberAsString); // 1234 string

- 연산의 특성을 이용해서 아래와 같이 변환할 수 있다.

var numberAsNumber = "1234";
var numberAsString = numberAsNumber - 0;
console.log(numberAsNumber, typeof numberAsNumber); // 1234 string
console.log(numberAsString, typeof numberAsString); // 1234 number

2. 날짜와 시간(Date)

프론트엔드 개발할 때, 날짜와 시간을 다루는 경우가 많다.

  • 회원가입 한 날짜와 시간
  • 글 작성 시간
  • 휴대폰 현재 시간 등..

Date

날짜 / 시간을 저장하고 보여줄 때 날짜 객체를 사용
날짜 객체를 호출하여 쉽게 시간과 날자를 얻을 수 있다.

날짜 객체를 생성할 때는 new 연산자 다음에 Date생성자를 쓴다.

var rightNow = new Date();
console.log(rightNow); // 2019-02-18T00:45:06.562Z

Date 객체로 현재 시간을 가져온 후, Date 객체가 가지고 있는 함수로 날짜, 시간의 값을 가져올 수 있다.
let rightNow = new Date(); // 2020-03-27T10:31:38.649Z
let year = rightNow.getFullYear(); // 2020
let month = rightNow.getMonth()+1; // 3 
// (getMonth 함수로 값을 받을 때, 현재 달보다 1 작은 값이 반환된다)
let date = rightNow.getDate(); // 29
let day = rightNow.getDay();// 0
let currentHour = rightNow.getHours(); // 21
let currentMin = rightNow.getMinutes(); // 34

getTime

getTime 메서드는 날짜의 밀리초 표현을 반환
기준 일자: 1970년 1월 1일

let rightNow = new Date();
let time = rightNow.getTime(); // 1585485456483

현재는 1585485456483를 반환 / 1970년 1월 1일로부터 1585485456483 밀리초가 지났다는 의미

getTime 함수로 반환된 숫자를 비교하여 더 과거를 판단할 수 있다. (값이 더 작으면 과거)


특정 날짜의 Date

특정 날짜를 매개변수로 넘겨주면, 해당 날짜의 Date를 반환 받을 수 있다.

let date1 = new Date('December 17, 2019 03:24:00'); // 2019-12-16T18:24:00.000Z
let date2 = new Date('2019-12-17T03:24:00'); // 2019-12-16T18:24:00.000Z
let date3 = new Date(2019, 5, 1); // 2019-05-31T15:00:00.000Z

🎯[문제]

함수로 인자를 받아 현재 기준으로 해당 생일이 만으로 몇 살인지 계산

function getWesternAge(birthday) {
  let age;
  let today = new Date(); // 현재 날짜 객체 생성
  let month = today.getMonth() + 1; // 현재 날짜의 월
  let day = today.getDate(); // 현재 날짜의 일
  let birth = new Date(birthday); // 생일 날짜 객체 생성
  let bMonth = birth.getMonth() + 1; // 생일 날짜의 월
  let bDay = birth.getDate(); // 생일 날짜의 일   
  age = today.getFullYear() - birth.getFullYear(); // 현재 년도 - 생일 년도 
  birth.setFullYear(today.getFullYear()); // 2020-06-21 (setFullYear() 메서드를 이용하여 날짜의 전체 연도를 설정 (현재 년도))
  if (today < birth) { // 현재 월, 일이 생일 월, 일 보다 작을 때 (생일이 지나지 않았을 때) 
    return age - 1;
  } else { // 현재 월, 일이 생일 월, 일 보다 클 때 (생일이 지났을 때)    
    return age;
  }
}
getWesternAge('1989-06-21T00:45:06.562Z'); // 생일을 인자로 전해준다
profile
룰루랄라! 개발자 되고 싶어요🙈

0개의 댓글