Para propiedad propia:
var loan = { amount: 150 };
if(Object.prototype.hasOwnProperty.call(loan, "amount"))
{
//will execute
}
Nota: usar Object.prototype.hasOwnProperty es mejor que loan.hasOwnProperty (..), en caso de que un hasOwnProperty personalizado se defina en la cadena de prototipos (que no es el caso aquí), como
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
Para incluir propiedades heredadas en el hallazgo, use el operador in : (pero debe colocar un objeto en el lado derecho de 'in', los valores primitivos arrojarán un error, por ejemplo, 'length' en 'home' arrojará un error, pero 'length' en la nueva cadena ('casa') no)
const yoshi = { skulk: true };
const hattori = { sneak: true };
const kuma = { creep: true };
if ("skulk" in yoshi)
console.log("Yoshi can skulk");
if (!("sneak" in yoshi))
console.log("Yoshi cannot sneak");
if (!("creep" in yoshi))
console.log("Yoshi cannot creep");
Object.setPrototypeOf(yoshi, hattori);
if ("sneak" in yoshi)
console.log("Yoshi can now sneak");
if (!("creep" in hattori))
console.log("Hattori cannot creep");
Object.setPrototypeOf(hattori, kuma);
if ("creep" in hattori)
console.log("Hattori can now creep");
if ("creep" in yoshi)
console.log("Yoshi can also creep");
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Nota: Uno puede verse tentado a usar typeof y [] el descriptor de acceso de propiedad como el siguiente código que no siempre funciona ...
var loan = { amount: 150 };
loan.installment = undefined;
if("installment" in loan) // correct
{
// will execute
}
if(typeof loan["installment"] !== "undefined") // incorrect
{
// will not execute
}
hasOwnProperty
se sobrescribe el método, puede confiar en elObject.prototype.hasOwnProperty.call(object, property)
".