JavaScript- String & Number 에 대해서 알아보자!

이병수·2020년 6월 25일
0

TIL

목록 보기
16/19

오늘은 JavaScript - String & Number 에 대해서 알아보자

Sting <-> Number 변환

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

여기서 주의할 점은 '200'-'10' 이다. 스트링과 스트링을 뺐는데 숫자처럼 인식 후 연산한 결과값을 보여준다. -의 경우 오로지 숫자에만 사용되는 연산이다!
NaN은 Not a Number란 뜻으로 더하기나 빼기가 써있어서 컴퓨터가 숫자인줄 알고 계산하려고 했더니 도대체 계산이 불가능하고 이상한 답이 나왔다는 뜻이다.

console.log('안녕'+'하세요'); // 안녕하세요
console.log('안녕하세요'-'하세요'); //NaN

string -> number

1) Number 함수

var birthYearInput = "2000";
console.log(typeof birthYearInput);

var numberBirthYear = Number(birthYearInput);
console.log(typeof numberBirthYear);

다음과 같이 Number 함수를 사용해서 String에서 Number형으로 전환할 수 있다

2) parseInt,parseFloat

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

number -> string

var numberAsNumber = 1234; 
var numberAsString = numberAsNumber.toString();

console.log(numberAsNumber, typeof numberAsNumber); //1234 'number'

console.log(numberAsString, typeof numberAsString); //1234 string

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

var numberAsNumber = 1234; 
var numberAsString = 1234 + "";
>> 결과 값은 위와 같다 

b) -연산

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

console.log(numberAsString, typeof numberAsString); //1234 'number'

날짜와 시간

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

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

날짜와 시간을 저장하고 보여줄 때 날짜 객체를 사용한다.

var rightNow = new Date();
console.log(rightNow);

위 값은 호출 당시 현재값을 보여주지 시간이 지남에따라 변동되는 값이 아니다.

Date 객체로 현재 시간을 가져온 후,
Date 객체가 갖고 있는 함수로 각 날짜, 시간의 값을 가져올 수 있다

method

let rightNow = new Date();
let year = rightNow.getFullYear();
let month = rightNow.getMonth()+1;
let date = rightNow.getDate();
let day = rightNow.getDay();
let currentHour = rightNow.getHours();
let currentMin = rightNow.getMinutes();

여기서 getMonth는 함수로 값을 받을 때, 현재 달보다 1작은 값이 반환되므로 주의!

getTime

getTime 메서드로 날짜의 밀리초 표현을 반환할 수 있다.

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

console.log(time);

기준이 되는 일자는 1970년 1월 1일이며 그로부터 ~초 만큼 지났다는 의미다.

이렇게 getTime 함수로 반환된 숫자로 비교연산을 통해 언제가 더 과거인지 판단할 수 있다. 값이 더 작으면 과거이다.

레플릿

>>>문제
미국을 비롯해 전세계 대부분의 나라들이 생일을 기준으로 나이를 계산 합니다. 
생일이 지나야 비로소 한 살을 더 먹게됩니다.


그에 비해 우리나라는 새해가 되면 모든 국민이 1살을 더 먹는 방식 입니다. 
태어나면 1살 부터 시작하고 새해때 2살이 됩니다.
그래서 10월 이나 11월에 태어나는 아기들은 한두달 안에 2살이 되버리기도 하죠.
1살 차이도 크게 생각하는 우리나라 고유의 문화에 비롯한 계산법이 아닌가 추측해 봅니다. 
미국이나 다른 나라가 사용하는 나이 계산법은 우리나라에서는 만나이 라고 하죠. 

getWesternAge 함수를 구현해주세요.
getWesternAge 함수는 birthday 라는 인자(input)를 받습니다.
birthday는 Date 객체이며 생일을 나타냅니다. 
현재 기준으로 해당 생일이 만으로 몇살인지 계산 후 리턴해주세요.

예를 들어, 오늘이 2019년 3월 23일이고, birthday 값이 다음과 같다면:

1990-03-21T00:45:06.562Z

리턴 값은 29 이 되어야 합니다.
>>>내풀이 
function getWesternAge(birthday) {
  let rightNow = new Date();

  
  if(rightNow.getMonth()+1>birthday.getMonth()+1) {
    return rightNow.getFullYear() - birthday.getFullYear();
  }
  else if (rightNow.getMonth()+1<birthday.getMonth()+1) {
    return rightNow.getFullYear() - birthday.getFullYear() - 1;
  }
  else if (rightNow.getMonth()+1===birthday.getMonth()+1) {
    if(rightNow.getDate()>=birthday.getDate()) {
      return rightNow.getFullYear() - birthday.getFullYear();
    }
    else {
          return rightNow.getFullYear() - birthday.getFullYear() - 1;
    }
  }
  
}
>>>모델 솔루션
function getWesternAge(birthday) {
    var today    = new Date();
    var thisYear = 0;
    
    if (today.getMonth() < birthday.getMonth()) {
        thisYear = 1;
    } else if ((today.getMonth() == birthday.getMonth()) && today.getDate() < birthday.getDate()) {
        thisYear = 1;
    }
    
    var age = today.getFullYear() - birthday.getFullYear() - thisYear;
    
    return age;
}

Number

Math 함수

  • Math.round() // 반올림

  • Math.ceil() // 올림

  • Math.floor() // 내림

Random 함수

랜덤 숫자를 쓸 일이 많아서 JavaScript에서 이미 랜덤함수가 구현되어 있다!
랜덤함수의 결과값은 0과 1사이의 랜덤 값이지만 아래와 같이 개발자가 원하는 범위의 랜덤 수를 설정할 수 있다.

var randomNumber = Math.random();
console.log(Math.floor(randomNumber*10));

이런 랜덤함수는 로또를 뽑거나, 이벤트 당첨자를 뽑을 때 유용하게 쓰인다!

레플릿

문제
최소(min), 최대값(max)을 받아 그 사이의 랜덤수를 return하는 함수를 구현해주세요.
함수는 짧지만, 이번에는 수학의 뇌를 조금 써야 하는 assignment입니다.

풀이 참조

0개의 댓글