JaveScript

모던 자바스크립트 스터디 3일차이다. 오늘은 9, 10장을 공부했다. 공부하면서 아래에 대한 궁금증이 생겼다. 1. 1 - '1' = 0일까? 2. 빈문자열도 프로퍼티 키로 사용하면 키를 가지고 Parse을 할 수 있을까? 궁금증1 숫자 타입이 아닌 값을 숫자 타입으로 변환하는 방법은 4가지가 있다고 한다. 1. Number 생성자 함수를 new 연산자없이 호출 2. parseInt, parseFloat 함수를 사용해서 문자열만 숫자타입으로 변환 3. + 단항 산술 연산자 사용 4. * 산술 연산자 사용 근데 위의 경우에는 - 산술 연산자를 사용했기 때문에 해당되는것이 없었다. 그럼 왜 이런 일이 발생했을까? 이유 + is ambiguous. It can mean "concatenate" or "add"..
모던자바스크립트 스터디 2일차이다. 오늘은 7, 8장을 공부했다. 일치 비교 연산자에 대해 블로깅하려고 한다. 궁금증1 왜 NaN === NaN은 false일까? # NaN 이란? NaN은 자신과 일치하지 않는 유일한 값이라고 한다. number value that is a IEEE 754 “Not-a-Number” value 위처럼 숫자가 아니라고 한다. 하지만 type은 number이다. 이유 NaN은 NaN인 유일한 숫자이기 때문이다. 그러니까 자기 자신과 같은 number인 것이 없다. 그렇기 때문에 같은 NaN 끼리 비교해도 true가 아닌것이다. The IEEE 754 spec for floating-point numbers (which is used by all languages for fl..
모던 자바스크립트 스터디 1일차로 5,6장을 읽었다. expressjs를 다루면서 Null과 undefined를 제대로 알지 못하고 다룬것 같아서 다시 공부했다. 1. 차이점 type이 다르다. undifined는 Type이 undefined로 단순히 undefined을 리턴한다. undefined라는 하나의 타입인것이다. null은 type이 object로 빈 오브젝트이다라는 걸 보여준다. 결론 # undefined 정의되지 않은 값은 변수에 값이 할당되지 않은 경우 사용되는 기본 값입니다. # null 비어 있거나 존재하지 않는 참조를 나타내는 기본 값입니다. 궁금증1 위 사진을 보라. null은 type이 오브젝트고, undefined는 undefined였다. 근데 왜 둘이 비교했을때, true가 ..
파이썬을 주로 쓰다가 javascript 로 코드를 짜다보니 세미콜론을 안써도 된다, 써야한다 말이 많았다. 그래서 안쓰고 있다가 에러가 나서 꼭 써야하는 부분이 있구나 싶었다. 문제상황 try { return jwt.verify(token, TOKEN_SECRET, { ignoreExpiration: true }) as IJWTTokenData; } catch (error) { return null; } 위처럼 코드를 작성했는데 null 부분이 에러가 났다. 원인 ASI 동작 결과 # ASI 동작결과 return; null; # 내가 원했던 결과 return null; 내가 prettier 같은 설정을 안해놔서 자동으로 줄바꿈이 되지 않았고, 이 코드가 위처럼 동작했던 것이다. 해결 try { retu..
요구사항 년, 월을 입력받으면 입력받은 월에 해당하는 1~말일에 해당하는 레코드를 필터링하고 싶었다. 코드를 작성하고 11월을 선택하고 필터링하니 10월31일부터 조회되는 문제가 발생했다. 문제사항 바로 해보면 아는데, JS에서 기본적으로 리턴해주는 현재 시각은 localtime이고 string으로 변환시킨 시각은 UTC 기준이다. 그래서 9시간의 차이가 난다. 해결방법 dayjs 패키지를 사용해서 현재시간을 리턴하는 코드를 작성했다. 그래서 년, 월을 입력받으면 입력받은 월에 해당하는 1~말일에 해당하는 레코드를 필터링했다. ## dayjsConfig.ts import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; import timezone fro..
Node.js/Express 프로젝트의 구조를 일반적으로 한개의 레포지토리에서 관리하는 모노리포 구조로 작성했다. 모노리포와 멀티리포 비교는 아래 블로그를 참고하길 바란다. https://tech.buzzvil.com/handbook/multirepo-vs-monorepo/ 구조설명 src 디렉토리 내에 다양한 서브 프로젝트들이 위치하고 있으며, 각각의 서브 프로젝트들은 독립적인 기능을 가지고 있거나 연관된 기능들을 묶어놓은 구조이다. 아래는 간단한 예시를 작성했다. ├── package-lock.json ├── package.json ├── src │ ├── @types │ │ ├── api │ │ └── exception │ ├── bin │ ├── config │ ├── database │ │ ├─..
·JaveScript/NodeJS
이전에 NVM으로 NodeJS 버전을 관리했었다.(참고 https://geabalseabal.tistory.com/245) 이제 자바스크립트 문법을 공부하는데, 터미널에 어떻게 뜨는지 확인하고 싶었다. 매우 간단하다. 새로운 디렉토리를 만들었다. # 디렉토리 생성 & mkdir javascript_playground && cd javascript_playgroun # 디렉토리 내 파일 확인(나는 test.js라는 파일을 생성했다.) & ls test.js # 디렉토리 내 설치된 노드 버전이 있는지 확인 $ nvm list v17.9.1 v18.16.1 -> v18.17.0 default -> v18 (-> v18.17.0) iojs -> N/A (default) unstable -> N/A (defaul..
ExpressJS 프로젝트를 클론 받았다. 근데, 노드js 버전을 알아야 노드 package 들을 설치할 것이 아닌가? 노드 버전도 모르고 패키지를 막 설치하면 패키지 충돌은 자명해보였기 때문에, 노드 버전을 알고 싶어졌다. 보통 노드 버전은 package.json에서 engine 의 하부에 기재되어있다고 한다. 첫번째 방법 근데, package.json의 "engines" 필드에 nodejs 버전을 확인할 수 없었다...? 두번째 방법 그래서 Readme 파일을 확인해보기로 했다. 보통 Readme에 언어의 버전을 기재해놓는 것이 정상적이니까 난감했다. 왜 Readme 파일은 만들어진적이 없는건가 실제로 서비스되고 있는 프로젝트인데 이렇다는 생각에 더 황당했다. 유지보수는 어떻게 하고 있던거지...? ..