본문 바로가기
Study/JavaScript

number사이에 string이 있어도 number다.

by dev_kong 2021. 11. 24.
728x90
728x90

제목 어그로 지렸다.

유튜바 경력 어디안간다.

https://kong-dev.tistory.com/23?category=982997 

 

문자열 다루기 기본

문제 설명 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 접근방법

kong-dev.tistory.com

 

또 이 문젠데

우리집 시니어가 이거 풀라면서 예외가 있으니까 잘 생각 해보랬다.

 

 

function solution(s) {
  const arr = s.split('');

  if (arr.length !== 4 && arr.length !== 6) {
    return false;
  }

  for (let value of arr) {
    if (isNaN(Number(value))) {
      return false;
    }
  }
  return true;
}

 

없는데여 그런거...

잘만 도는데여...

우리집 시니어 내 코드 보더니 역시 참신하단다.

뭐가 대체 나는 나일 뿐인걸 

 

우리집 시니어가 처음 짰던 코드

function alpha_string46(s) {
   return s.length == 4 || s.length == 6 ? !isNaN(s) : false 
}

 

!!!

오메.... 내 코드 눈감아..

근데 이거 돌리니까 케이스 몇개 통과를 못시킨다.

뭐지... 완벽한거 아닌가..

아무리 생각해도 모르겠는데

 

정답은 지수형태, 16진수형태,  8진수형태 란다.

뭔데요 그게;;

 

가끔 계산기 갖고 장난치다가 

중간에 숫자가 아니라 E들어가있는거 본적이 있는데

난 이제껏 그거 Error 줄 알았다.

너무 길어서 Error 띄운건줄 알앗는데

그게 아니라

지수 형태란다.

뭔가 싶어서 찾아봤는데 봐도 모르겠다

뭐 자연상수 뭐 그런거란다 그런가보다

미친;;

 

16진수는 0x13 같이 중간에 x가 들어간 형태

8진수는 0o13같이 중간에 o가 들어간 형태

문제는 얘네를 숫자로 인식 한다는 거다.

 

https://kong-dev.tistory.com/24

 

includes로 NaN을 확인 할 수 있을까?

https://kong-dev.tistory.com/23?category=982997 문자열 다루기 기본 문제 설명 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 Fa..

kong-dev.tistory.com

 

여기서 한번 정리했지만

string에다가 isNaN을 돌리면

true가 나온다.

isNaN 내부에 Number 같이 number로 변환해주는 코드가 있나보다.

근데 위에 있는

1e23, 0x13, 0o13같이 생긴애들은

쟤네를 문자열로 바꿔서

Number를 돌리면 NaN이 나오질 않는걸 확인할 수 있다.

결국 쟤네를 숫자로 인식 한다는 거다.

 

console.log(Number('1e23'))  // 1e+23
console.log(Number('0x13'))  // 19
console.log(Number('0o13'))  // 11
console.log(isNaN('1e23'))   // false
console.log(isNaN('0x13'))   // false
console.log(isNaN('0o13'))   // false

솔직히 쟤네가 왜 19고 왜 11인지는 모르겠다.

그냥 숫자를 표현하는 방식에는 저런게 있구나.. 로 퉁치고 넘어가고 싶다.

비전공 + 문과 는 저런거 모른다..ㅎ

 

아 내가 짠 코드는 문자열을 하나 하나 뜯어서 

isNaN을 돌리고 true 또는 false 를 리턴하기때문에

저런 얄팍한 술수에 걸리지 않는다.

그니까 1e23이면

1 isNaN 돌리고, e isNaN돌리고.. 반복

그럼 e isNaN 에서 true 가 뜨겠지

if 조건문 안에 넣어놔서 true 뜨면 바로 

false 리턴하게 해놔서

저런 잡다구리에 걸리질 않는다.

의도했냐고?

ㅎㅎㅎ..그럴리가...

728x90
728x90

댓글