检查给定对象的属性是否存在

3
我试图检查myObj是否具有“x”属性,但当myObj没有我正在寻找的属性时,它不返回任何内容。以下是代码:
var myObj = {
    gift: "pony",
    pet: "kitten",
    bed: "sleigh"
};
function checkObj(checkProp) {
if(myObj.hasOwnProperty("gift")){ return myObj[checkProp]; } else if(myObj.hasOwnProperty("pet")){ return myObj[checkProp]; } else if(myObj.hasOwnProperty("bed")){ return myObj[checkprop]; } else { return "未找到"; } }

提示:该函数只检查myObj中的三个属性(礼物,宠物和床)。如果要检查其他属性,请将其添加到函数中。
4个回答

3

注意:if (myObj.hasOwnProperty("gift")) 会一直执行,因为 myObj 有属性 gift,所以其他条件永远不会被评估。

你难道不想只做这个吗?

var myObj = {
    gift: "pony",
    pet: "kitten",
    bed: "sleigh"
};

function checkObj(checkProp) {

    if (myObj.hasOwnProperty(checkProp)) {
        return myObj[checkProp];
    }
    else {
        return "Not Found";
    }
}

console.log(checkObj("gift"));
console.log(checkObj("foo"));


1
你应该检查传递的属性而不是在if语句中硬编码属性。这可以简化为三元运算符。因为如果有一个变量存储属性,请使用[]符号查找对象内部的属性值。如果checkProp变量是'gift',则myObj [checkProp]变成myObj.gift,因为使用checkProp变量的值。
function checkObj(checkProp) {
   return myObj[checkProp]?myObj[checkProp]:"Not found"
}

1
你可以使用Object.keys来获取自身属性列表,然后调用Array.includes查找特定属性并返回其值。

const myObj = {
    gift: "pony",
    pet: "kitten",
    bed: "sleigh"
};
function checkObj(myObj, key){
  return Object.keys(myObj).includes(key) ? myObj[key] : "Not found";
}
console.log(checkObj(myObj, 'gift'));
console.log(checkObj(myObj, 'pet'));
console.log(checkObj(myObj, 'foo'));


1
你可以使用 in 运算符 来测试指定的属性是否在对象中:

const myObj = {
    gift: "pony",
    pet: "kitten",
    bed: "sleigh"
};

function getProp(obj, prop) {
  return prop in obj ? obj[prop] : undefined;
}

console.log(getProp(myObj, 'gift'));
console.log(getProp(myObj, 'pet'));
console.log(getProp(myObj, 'bed'));
console.log(getProp(myObj, 'noProp'));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接