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

时间:2019-02-16 16:19:32

标签: javascript

我正在尝试检查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 "Not Found";
    }
}

4 个答案:

答案 0 :(得分: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 :(得分:1)

您应该检查要传递的属性,而不是在if子句中对属性进行硬编码。然后可以将其简化为三元运算符。 因为如果您有一个存储属性的变量,请使用[]表示法,该符号使用属性的值在对象内部进行查找。

如果checkProp变量为'gift',则当使用checkProp变量的值时,myObj [checkProp]变为myObj.gift。

function checkObj(checkProp) {
   return myObj[checkProp]?myObj[checkProp]:"Not found"
}

答案 2 :(得分: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'));

答案 3 :(得分:1)

您可以使用in operator来测试指定属性是否在对象中:

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'));