본문 바로가기

javascript12

javascript class this bind 문제 - this가 왜 undefined로 나오지? typescript로 express api 기본 세팅의 보일러 플레이트를 만들다가 이론으로만 접하던 this 문제를 제대로 겪었다. controller-service-repository의 3계층 구조(3 layer pattern)로 분리하고 있는데 this가 undefined로 뜬는 게 아닌가.. gpt에 물어보니 bind 키워드를 알려줘서 아차!했다. 문제가 된 코드는 아래와 같다. // users.route.ts import { Router } from "express"; import { UserController } from "./users.controller"; import wrapAsyncMiddleware from "../middlewares/wrapAsyncMiddleware"; const.. 2024. 2. 25.
[javascript | JS] 자바스크립트의 자료형과 특성 ▼ 느슨한 타입(loosely typed)의 동적(dynamic) 언어 자바스크립트의 변수는 자료형에 관계없이 모든 데이터일 수 있다. 따라서 변수는 어떤 순간에 문자열일 수 있고 다른 순간엔 숫자가 될 수도 있다. → JS는 자료의 타입은 있지만 변수에 저장되는 값의 타입은 언제든지 바꿀 수 있는 언어이다. → 문제점과 보완 1 == '1'이 True가 되는 마법.. 문자열 "1e22"는 숫자 1의 22승이 되는 마법.. 타입을 지정해주는 타입스크립트(typescript)를 사용하자...! ▼ Javascript의 형변환 함수와 연산자에 전달되는 값은 대부분 적절한 자료형으로 자동 변환되며, 이런 과정을 "형 변환(type conversion)"이라고 한다. 암시적 변환 alert가 전달받은 값의 자료.. 2022. 7. 21.
[프로그래머스 - Level 1] 콜라츠 추측 (JS) [문제] 입력된 수가 짝수: 나누기 2 입력된 수가 홀수: *3 +1 결과값이 1이 될 때까지 반복한다. 단, 주어진 수가 1인 경우 0을, 500번 반복할 때까지 1이 되지 않는다면 -1을 반환한다 [로직] 1. num이 1인 경우, 바로 0을 리턴해준다 2. 반복문을 돌며 짝수일 경우 /2 (이때 2로 나눠준 값이 1이면 바로 횟수를 리턴), 홀수일 경우 *3+1을 해준다. 3. 반복 횟수가 500번이 넘어갈 경우 -1을 리턴해준다. [코드] const n = 6; function solution(num) { if (num === 1) { return 0; } for (let i = 0; i < 500; i++) { if (num % 2 ===0) { num = num/2; if (num === 1.. 2022. 7. 20.
[프로그래머스 - Level 1] 이상한 문자 만들기 (JS) [문제] 문자열의 짝수번째 알파벳 → 대문자 문자열의 홀수번째 알파벳 → 소문자 문자열 s는 한 개 이상의 단어로 구성, 짝/홀은 단어별로 인덱스 판단 첫번째 글자는 인덱스 넘버 0이므로, 짝수로 처리 → [try] => [0,1,2] → [hello] => [0,1,2,3,4] → [world] => [0,1,2,3,4] [로직] 1. 단어별 짝수/홀수번째를 판단하기 위해 문자열 s를 배열로 바꾸고(띄어쓰기 기준으로), .map()으로 단어별로 반복하며 배열을 만들어준다. ▶ "try hello world" → ['try', 'hello', 'world'] 2. 다시 .map()으로 각 단어를 돌며 단어를 알파벳 단위 배열로 만들어준다. ▶ [ [ 't', 'r', 'y' ], [ 'h', 'e', .. 2022. 7. 19.
[javascript | JS] var, let, const 변수의 생성과정, 호이스팅, TDZ, 스코프, 클로저와 은닉화(캡슐화) ▼ var, let, const if (true) { var x = 3; } console.log(x);// 3 if (ture) { const y = 3; } console.log(y);// Uncaught ReferenceError: y is not defined x는 정상적으로 출력 되는데 y는 에러가 발생하는 이유는? var name = 'Mike'; console.log(name);// Mike var name = 'Jane'; console.log(name);// Jane let name = 'Mike'; console.log(name);// Mike let name = 'Jane';// error! console.log(name);// Uncaught SyntaxError: Identifie.. 2022. 7. 19.
[프로그래머스 - Level 1] 서울에서 김서방 찾기 (JS) [문제] String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아 "김서방은 x에 있다"는 String을 반환. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다. [로직] 1. indexOf() 함수를 이용해 "Kim"의 인덱스 넘버를 가져온다. 2. 가져온 인덱스 넘버를 "김서방은 x에 있다"의 형태로 return! [코드] const seoul = ["Jane", "Kim", "Park"]; function solution(seoul) { let index = seoul.indexOf("Kim") return '김서방은 '+index+'에 있다'; } console.log(solution(seoul)); 1. indexOf() 함수를 이용해 ".. 2022. 7. 18.