Эти три метода отличаются тем, как они обрабатывают собственные vs. унаследованные свойства и перечисляемые vs. неперечисляемые свойства.
for...inhasOwnProperty(), если нужны только собственные свойстваfor (const key in obj) {
if (obj.hasOwnProperty(key)) { ... }
}
Object.keys()Object.getOwnPropertyNames()Symbol| Метод | Собственные | Унаследованные | Неперечисляемые |
|---|---|---|---|
for...in | ✅ | ✅ | ❌ |
Object.keys() | ✅ | ❌ | ❌ |
Object.getOwnPropertyNames() | ✅ | ❌ | ✅ |
Object.keys() в большинстве повседневных сценариев для безопасной и предсказуемой итерацииfor...in, когда тебе явно нужно пройтись по цепочке прототиповObject.getOwnPropertyNames(), когда нужен доступ к неперечисляемым свойствам — например, при отладке или метапрограммированииObject.keys() безопаснее for...in для итерации по свойствам объекта, потому что она возвращает только собственные перечисляемые свойства и исключает цепочку прототипов.
Новый — ещё не проверен сообществом
Вы