Полифил Object.hasOwn

Как проверить, что у объекта есть определенный ключ?

const obj = { a: 1 }; console.log("a" in obj); // true console.log("toString" in obj); // тоже true, потому что оператор in ищет в цепочке прототипов

Как проверить, что этот ключ лежит непосредственно в самом объекте? Использовать метод Object#hasOwnProperty:

console.log(obj.hasOwnProperty("a")); // true console.log(obj.hasOwnProperty("toString")); // false

Но с таким подходом есть проблема. Если в тестируемом объекте нет прототипа, то в нем не будет и метода hasOwnProperty:

const npo = Object.create(null); console.log(npo.hasOwnProperty("a")); // падает с ошибкой

Реализуйте функцию hasOwn, которая принимает объект obj и строку str и проверяет, что строка str является ключом объекта obj. Функция должна работать для любых объектов.

const o1 = { a: 1 }; const o2 = Object.create(null); o2.a = 1; console.log(o1.hasOwnProperty("a")); // true console.log(o1.hasOwnProperty("toString")); // false console.log(o2.hasOwnProperty("a")); // true console.log(o2.hasOwnProperty("toString")); // false