Накратко
Наличието на свойство е различно от наличието на полезна стойност.
Полезно е да знаеш
Object.hasOwn(obj, key) проверява дали свойството принадлежи на самия обект. За {price: undefined} проверката за "price" връща true, въпреки стойността undefined. Наследени свойства не минават. [1]
Това е полезно при частично обновяване, когато липсващо поле означава „не променяй“, а подадено поле има отделен смисъл. След проверката за наличие валидирай и стойността. Не използвай истинността на obj.price за същата задача: нула, празен низ и false могат да бъдат съзнателно подадени допустими данни.
Източници
За повече подробности и проверка на информацията: