Как проверить, что у объекта есть определенный ключ?
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