Object.hasOwn() — это статический метод, появившийся в ES2022, который проверяет, содержит ли объект конкретное собственное свойство (то есть не унаследованное через цепочку прототипов).
Object.hasOwn(obj, prop)
hasOwnProperty()Более старый метод hasOwnProperty() — это унаследованный метод, доступный на большинстве объектов через Object.prototype. Это создаёт потенциальную проблему: если объект создан с помощью Object.create(null), у него нет прототипа, а значит hasOwnProperty() просто недоступен на нём.
const obj = Object.create(null);
obj.name = "Alice";
obj.hasOwnProperty("name"); // ❌ TypeError: not a function
Object.hasOwn(obj, "name"); // ✅ true
Object.hasOwn() — это статический метод, его не получится случайно затенить свойством самого объектаconst user = { hasOwnProperty: () => false, name: "Bob" };
user.hasOwnProperty("name"); // ❌ false (переопределён!)
Object.hasOwn(user, "name"); // ✅ true
Object.hasOwn() в современных проектах (ES2022+) как предпочтительный вариантhasOwnProperty() только если нужна поддержка старых окружений без ES2022Object.hasOwn() — это более безопасная и надёжная замена hasOwnProperty(), потому что он:
Object.hasOwn() — это метод экземпляра, унаследованный из Object.prototype, в то время как hasOwnProperty() — это статический метод на конструкторе Object.
Новый — ещё не проверен сообществом
Вы