설정 객체에 해당 키가 직접 있는지 확인하기
자바스크립트 코딩테스트 문제로 object-membership-methods 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.
문제 설명
설정 객체 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]]
아직 실행하지 않았습니다.
실행 결과
아직 실행하지 않았습니다.
예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.
댓글
문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.