점·대괄호 표기, 추가, 변경, 삭제와 존재 검사를 배웁니다.
object.key와 object['key']로 값을 읽고 대입으로 추가·변경합니다. Object.hasOwn은 객체 자체가 가진 속성인지 검사하며 delete는 속성을 제거합니다.
user[key]는 key 변수에 담긴 문자열 score로 속성을 찾기 때문에 user.score와 같은 칸을 가리키고, += 10으로 80이 90이 됩니다. user.role에 학습자를 대입하는 줄은 원래 없던 role 속성을 새로 만들고, 그래서 Object.hasOwn으로 role을 검사한 결과가 true로 출력됩니다.
in 연산자는 프로토타입에서 물려받은 속성까지 찾기 때문에 문자열 toString을 in으로 검사하면 user에서도 true가 나오지만, Object.hasOwn은 false를 돌려줍니다. 또 값을 undefined로 넣어 둔 속성은 읽으면 undefined지만 hasOwn으로는 true가 되어, 아예 없는 속성과 구분할 수 있습니다.
존재하지 않는 속성을 읽으면 오류 대신 undefined가 나오므로 필요한 값은 검증하세요.
직접 바꿔보세요role을 delete하고 hasOwn 결과를 다시 확인하세요.