JS

객체 순회 문제에서 파생된 두 가지 문제들

2025. 3. 3. 23:03
let hyesoonScore = {
  '데이터 모델링의 이해': 10,
  '데이터 모델과 성능': 8,
  'SQL 기본': 22,
  'SQL 활용': 18,
  'SQL 최적화 기본 원리': 20,
};

let minsoonScore = {
  '데이터 모델링의 이해': 14,
  '데이터 모델과 성능': 8,
  'SQL 기본': 12,
  'SQL 활용': 4,
  'SQL 최적화 기본 원리': 16,
};

function passChecker(scoreObject) {
  let score = 0;
  for (let k in scoreObject) {
    score += scoreObject[k];
  }
  score >= 60 ? console.log('축하합니다! 합격입니다!') : console.log('아쉽지만 불합격입니다..');
}

passChecker(hyesoonScore);
passChecker(minsoonScore);

 

이 코드를 작성하면서 두 가지 의문점이 생겼다.

 

1. 'score' 변수의 선언 위치

2. score 변수에 0을 할당하지 않고, 그냥 let score;로 선언했을 때 score의 누적값이 NaN이 되는 이유

 

먼저 1번을 분석해보면

score 변수를 passChecker 함수 바깥에 전역 변수로 선언해도 되는지 궁금했다.

안된다.

왜냐면 첫번째 함수 호출로 전달된 hyesoonScore의 for문을 돌고난 후 score에 누적된 값이,

두번째 함수 호출로 전달된 minsoonScore의 누적값을 구할 때 반영되기 때문이다.

전역 변수로 선언했기 때문에 그렇게 된 것이다.

만약 첫번째 함수 호출로 인해 전역 변수 score가 78이 됐다면,

두번째로 똑같은 함수를 호출해서 for문을 돌렸을 때 score의 값이 '78'인 상태에서 추가 누적이 되기 때문에

올바른 minsoonScore의 누적값을 구할 수 없다.

 

그다음, 2번을 분석해보면

그냥 let score;로 선언할 시 score 변수의 값은 'undefined'가 된다.

그래서 for문을 돌고 나면 undefined에 각 프로퍼티의 숫자값들을 더하게 되기 때문에 NaN(Not a Number)이 되는 것이다.

따라서 let score = 0; 으로 반드시 score의 초기값을 0, 즉 숫자로 초기화해줘야 올바르게 값을 누적한다.

 

'JS' 카테고리의 다른 글

const 변수 vs const 상수  (0) 2025.03.04
0.1 + 0.2 !== 0.3 (+해결방법)  (0) 2025.03.04
옵셔널 파라미터?  (0) 2025.03.02
콘솔 로그 안에서 콘솔 로그를 호출하면?  (0) 2025.03.02
형 변환 (문자, 숫자 -> 불리언 & 산수연산, 관계연산)  (0) 2025.03.01
'JS' 카테고리의 다른 글
  • const 변수 vs const 상수
  • 0.1 + 0.2 !== 0.3 (+해결방법)
  • 옵셔널 파라미터?
  • 콘솔 로그 안에서 콘솔 로그를 호출하면?
쥬피썬더의노예
쥬피썬더의노예
오히려 좋아
  • 쥬피썬더의노예
    d.log
    쥬피썬더의노예
    글쓰기 관리
    • 분류 전체보기 (112)
      • JS (37)
      • TS (3)
      • WEB (10)
      • React.js (20)
      • Next.js (4)
      • tanstack query (2)
      • Node.js (2)
      • HTML (5)
      • CSS (13)
      • CS (1)
      • 에이전트 (1)
      • Git (4)
      • JAVA (0)
      • SQL (0)
      • db (0)
      • GSAP (0)
      • 자료구조 (1)
      • 알고리즘 (0)
      • ✨회고 (5)
      • 포꾸 (0)
      • 인터뷰 (0)
      • 개발일지 (0)
      • 일기 (1)
      • etc (3)
      • 정처기 실기 (0)
        • C (0)
        • Java (0)
        • Python (0)
      • fonts (0)
      • articles (0)
      • 도서 (0)
  • 인기 글

  • 태그

    폼
    WEB
    상태 관리
    HTML
    유효성 검사
    React.JS
    GIT
    zustand
    SSR
    조합 패턴
    슬라이딩 윈도우
    css
    React Query
    자바스크립트
    SSG
    안티그래비티
    프론트엔드
    javascript
    클로저
    useEffect
    CSR
    Til
    리액트
    Next.js
    useState
    TypeScript
    리팩토링
    아키텍처
    React
    state
  • 최근 글

  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
쥬피썬더의노예
객체 순회 문제에서 파생된 두 가지 문제들
상단으로

티스토리툴바