我正在尝试检查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"; } }
答案 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'));