설정 객체에 해당 키가 직접 있는지 확인하기

자바스크립트 코딩테스트 문제로 object-membership-methods 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.

js-basic easy object-membership-methods 함수명: hasDirectSettingKey 제한 시간: 200ms

문제 설명

설정 객체 settings와 문자열 keyName이 주어집니다.

객체에 keyName직접 정의된 키로 존재하는지 확인해 true 또는 false를 반환하는 hasDirectSettingKey 함수를 작성하세요.

단, 값이 false, 0, null이어도 키만 존재하면 true여야 하며, 프로토타입 체인에서 물려받은 키는 제외합니다.

설정 객체에 어떤 키가 직접 들어 있는지 Object.hasOwn()으로 확인해 보는 문제입니다.

오늘의 메서드

  • Object.hasOwn()

메서드 설명

  • Object.hasOwn(object, propertyKey)는 객체가 자기 자신의 키propertyKey를 가지고 있으면 true를 반환합니다.
  • 값이 false, 0, null이어도 키만 존재하면 true입니다.
  • 프로토타입 체인에서 물려받은 키는 세지 않습니다.

기본 문법

Object.hasOwn(object, propertyKey)

사용 예시

const settings = {
  darkMode: true,
  notifications: false,
};

Object.hasOwn(settings, 'darkMode'); // true
Object.hasOwn(settings, 'notifications'); // true
Object.hasOwn(settings, 'language'); // false

주의할 점

  • 이 문제는 값이 truthy인지가 아니라 키가 존재하는지를 묻습니다.
  • settings[keyName]false여도 키가 있으면 정답은 true입니다.
  • 상속받은 키는 제외하고, 객체에 직접 정의된 키만 확인해야 합니다.

제한사항

  • settings는 평범한 JavaScript 객체입니다.
  • keyName은 확인할 키 이름 문자열입니다.
  • 반환값은 boolean입니다.
  • 값의 종류는 boolean, number, string, null 등 무엇이든 될 수 있습니다.

예시

  • 입력: settings = { darkMode: true, notifications: false }, keyName = "notifications" → 출력: true
  • 입력: settings = { volume: 0, theme: "light" }, keyName = "language" → 출력: false
  • 입력: settings = { premium: null }, keyName = "premium" → 출력: true

힌트

  • settings[keyName] 값을 그대로 반환하면 false, 0, null 같은 값 때문에 틀릴 수 있습니다.
  • 이 문제는 값 비교보다 키 존재 여부 확인에 맞는 메서드를 고르는 것이 핵심입니다.
  • Object.hasOwn(settings, keyName) 형태를 바로 떠올려 보세요.

해설

이 문제의 핵심은 객체에 해당 키가 직접 있는지 확인하는 것입니다.

예를 들어 notifications: false처럼 값이 false인 경우,

if (settings[keyName]) {
  ...
}

처럼 검사하면 false가 되어 키가 없는 것처럼 잘못 판단할 수 있습니다.

그래서 값이 아니라 키 존재 여부를 확인해야 하고, 이때 Object.hasOwn()이 잘 맞습니다.

function hasDirectSettingKey(settings, keyName) {
  return Object.hasOwn(settings, keyName);
}

이 코드는:

  • 키가 직접 있으면 true
  • 없으면 false
  • 값이 false, 0, null이어도 키만 있으면 true 를 정확하게 처리합니다.

이 문제로 함께 익혀 두면 좋은 포인트는, 객체를 다룰 때는 값이 있는지키가 존재하는지를 구분해야 한다는 점입니다.

코드 작성

starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.

JavaScript 에디터 로딩 중...

커스텀 테스트

함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]

아직 실행하지 않았습니다.

실행 결과

아직 실행하지 않았습니다.

예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.

댓글

문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.