TIL # 22 (JS 19.1 - 20)

Mikyung Lee·2021년 1월 18일
0
post-thumbnail

19-1. String 💦💦💦 (다시 풀어보기)

  • 대소문자 바꾸기
let lastName = 'Yeri Kim';
let upperLastName = lastName.toUpperCase();
let lowerLastName = lastName.toLowerCase();
console.log(lastName);
console.log(upperLastName);
console.log(lowerLastName);
  • 문자 길이 확인
if (phoneNumber.length !== 10 && phoneNumber.length !== 11) {
  alert("폰 번호 제대로 입력하셨나요?");}
let name = prompt("성함을 입력해주세요");
if (name.length === 2) {
  alert("외자이시군요! 이름이 이쁘네요.");
} else if (name.length === 1) {
  alert("제대로 입력하셨나요?");
} else if (name.length === 3) {
  alert("멋진 이름입니다.");
}

핸드폰 번호는 0으로 시작하기 때문에 문자열로 바꿔줘야 한다. number형에는 length라는 속성이 존재하지 않기에 undefined라고 나온다.

let phoneNumber = "010123456789";
console.log(phoneNumber);
console.log(phoneNumber.length);
  • 문자열 찾기
let info = "JS는 프로그래밍 언어이다.";
let firstChar = info.indexOf("프로그래밍");
console.log(info, firstChar);

indexOf()함수는 문자열에 특정 문자열이 들어있는지 확인하고, 있다면 몇번 째 순서에 해당 문자열이 있는지 알려줌. 없다면 -1을반환함.

let info = "JavaScript는 프로래밍 언어이다.";
let firstChar = info.indexOf("프로래밍"); 
console.log(info, firstChar);
if (firstChar !== -1) { 
  info = info.slice(0, firstChar) + "프로그래밍" + info.slice(firstChar+4, info.length); 
}
console.log(info);

info.slice(0, firstChar)
slice(잘릴 시작위치, 잘릴 끝위치)
console.log(info.slice(0, firstChar);
console.log(firstChar+4, info.length);

  • console을 쓰지 않고, info 만 써도 적용이 된다.

Assignment

String의 slice()도 자주 사용되는 문자열 함수 중 하나입니다.
먼저 slice에 대한 설명을 가볍게 읽어봅시다.
(https://www.w3schools.com/jsref/jsref_slice_string.asp)
그 후 sliceCityFromAddress 함수를 구현해 주세요.

  • sliceCityFromAddress 함수는 address 인자를 받습니다.
  • address 인자에는 주소를 나타내는 string이 주어집니다.
  • 주어진 주소가 어느 도시인지를 찾아내서, 해당 주소에서 도시 부분만 삭제한 새로운 주소를 리턴해 주세요.
  • 주소는 무조건 "시" 로 끝납니다. 예를 들어, "서울시".
  • "도" 와 "시" 는 주소에 한번 밖에 포함되어 있지 않습니다.
    예를 들어, 다음과 같은 주소가 주어졌다면;
"경기도 성남시 분당구 중앙공원로 53"

다음과 같은 값이 리턴되어야 합니다:

"경기도 분당구 중앙공원로 53"
function sliceCityFromAddress(address) {
  let do_end = address.indexOf("도"); // 자리 위치 번호를 나타냄
  let si_end = address.indexOf("시"); // 자리 위치 번호를 나타냄
  if (do_end == -1) { //만약 도가 없다면, 시라면
    return address.slice(si_end + 2, address.length);
    //ex) '서울시' 영(2)등포구
  } else { //도가 있다면
    return address.slice(0, do_end + 1) + address.slice(si_end + 1, address.length);
  }
  // 이 문제의 key point는 '시'가 들어가는 모든 것은 없애야 한다.
}

19-2. String <-> Number 변환

  • 숫자끼리 더하기는 물론, string끼리 문자 연결 가능. 하지만 -의 경우 숫자만 가능. 문자열을 빼려고 하면 NaN라는 결과가 반환됨.
var birthYearInput = "2000";
console.log(typeof birthYearInput);
var numberBirthYear = Number(birthYearInput);
console.log(typeof numberBirthYear);
<- String을 Number로 바꾸기
var numberAsNumber = 1234;
var numberAsString = numberAsNumber.toString();
console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);
<- number을 string으로 바꾸기
var numberAsNumber =1234;
var numberAsString = 1234 + ""; <- number을 string으로 바꾸기
console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);
var numberAsNumber = "1234";
var numberAsString = numberAsNumber - 0; <- string을 number로 바꾸기
console.log(numberAsNumber, typeof numberAsNumber);
console.log(numberAsString, typeof numberAsString);

Assignment

우리나라는 국민연금을 만 65세 부터 받을 수 있습니다.
nationalPensionRemainingYearCount 함수를 구현해주세요.

  • nationalPensionRemainingYearCount 는 age_string 이라는 input을 받습니다.
  • age_string은 나이 값인데 string형 값으로 되어 있습니다.
  • 주어진 나이부터 몇년이 지나야 국민연금을 받을수 있는지 리턴해주세요.
  • 리턴 값으로는 다음 문장 처럼 리턴해야 합니다.
"앞으로 20년 남으셨습니다"

예를 들어, age_string 값이 다음과 같다면:

"35"

리턴 값은 다음과 같아야 합니다.

"앞으로 30년 남으셨습니다"
function nationalPensionRemainingYearCount(age_string) {
let remaining_year = 65 - Number(age_string)
return "앞으로 " +remaining_year + "년 남으셨습니다";}

20. 날짜와 시간

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

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

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();

  • 월요일은 1로 표기된다.
let rightNow = new Date();
let time = rightNow.getTime();

  • 지금의 시간이 밀리초로 표현된 것이다.
let date1 = new Date('December 17, 2019 03:24:00');
let date2 = new Date('2019-12-17T03:24:00');
let date3 = new Date(2019, 5, 1)

Assignment

미국을 비롯해 전세계 대부분의 나라들이 생일을 기준으로 나이를 계산 합니다. 쉽게 말해 미국은 태어나자마자 0살이고 생일을 지나야 비로소 한 살이 됩니다. 반면에 한국은 태어나자마자 1살이고 연도가 바뀔 때마다 한 살씩 먹습니다.
예를 들어 미국에서는 1995년 9월 12일에 태어났으면 1995년 9월 12일에는 0살이고
1996년 9월 12일이 되야 1살이 됩니다. 그에 비해 한국에서는 1995년 9월 12일에 태어나자마자 1살이고 1996년 1월 1일에 2살이 됩니다.
1살 차이도 크게 생각하는 우리나라 고유의 문화에 비롯한 계산법이 아닌가 추측해 봅니다. 미국이나 다른 나라가 사용하는 나이 계산법은 우리나라에서는 만 나이 라고 하죠.

  • 앞서 말한 만으로 계산한 나이를 구하는 함수인 getWesternAge 함수를 구현해 봅시다.
  • 이 함수는 birthday 라는 인자를 받고 이 birthday는 Date 객체입니다. birthday라는 인자를 넣었을 때, 현재를 기준으로 만으로 계산한 나이를 리턴 해주도록 구현해 봅시다. birthday는 string이 아닌 Date 객체라는 걸 명심하세요 :)
  • 예를 들어, 오늘이 2020년 7월 21일이고, birthday 값이 다음과 같다면:
1990-03-21T00:45:06.562Z
  • 리턴 값은 30 이 되어야 합니다
function getWesternAge(birthday) {
  let today = new Date();
   let thisYear = 0;
    if (today.getMonth() < birthday.getMonth()) {
      // 지금 month가 생일 month 보다 작다면
        thisYear = 1;
    } else if ((today.getMonth() == birthday.getMonth()) && today.getDate() < birthday.getDate()) { // 조건문
        thisYear = 1; // 같은 달에 날짜가 안지난 사람
    }
    let age = today.getFullYear() - birthday.getFullYear() - thisYear; //생일 지난 사람은 thisyear = 0, 생일 안 지난 사람은 thisyear = 1
    return age;
}
profile
front-end developer 🌷

0개의 댓글