주의사항

부작용 예시

// 프로토타입에 프로퍼티 추가 (악의적이거나 실수로)
Object.prototype.injected = 'malicious';

const user = {
  name: 'John',
  age: 30
};

// hasOwnProperty 없이 순회
for (let key in user) {
  console.log(key, user[key]);
}
// 출력:
// name John
// age 30
// injected malicious  ⚠️ 예상치 못한 프로퍼티!

// hasOwnProperty 사용
for (let key in user) {
  if (user.hasOwnProperty(key)) {
    console.log(key, user[key]);
  }
}
// 출력:
// name John
// age 30  ✅ 본연의 프로퍼티만!

안전한 방식들

[1] Object.keys() + for ~ of

const keys = Object.keys(obj);
for(const key in keys) {
	// do something	
}
Object.keys(obj).forEach((v) => {});

[2] for ~ in + hasOwnProperty

for(const key of obj) {
	if(Object.hasOwnProperty(key){
		// do something
	}
}

[3] Object.entries() + for ~ of

for (let [key, value] of Object.entries(obj)) {
  // do something
}