如何检查对象是否不具有函数参数中提到的属性?

4 浏览
0 Comments

如何检查对象是否不具有函数参数中提到的属性?

我想通过将变量传递给参数,使用函数来检查该属性是否存在于对象中。我尝试了三种最常用的方法来检查对象的现有属性,但仍然得到了undefined的输出。有人能告诉我我错在哪里吗?\n

 var obj=[
    {
        "firstName": "詹姆斯",
        "lastName": "邦德"
    }];
function propExists(prop)
{
  //我尝试了#1
  if(obj.hasOwnProperty(prop)===false)
   {
     return "属性不存在";
   }
 //我尝试了#2
  if(!(prop in obj))
   {
     return "属性不存在";
   }
 //我尝试了#3  
  if("undefined" === typeof(obj[prop]))
   {
     return "属性不存在";
   }
}
console.log(propExists("出生日期"));

0
0 Comments

问题的出现原因:在给定的代码中,obj是一个对象,而不是一个数组。因此,无法使用方括号来访问或删除其中的属性。

解决方法:

1. 首先,我们需要判断obj是否是一个数组。我们可以使用Array.isArray()方法来检查。

2. 如果obj是一个数组,我们需要将其转换为对象。有几种方法可以实现这一点,例如使用Array.reduce()方法或将其转换为JSON字符串再解析回对象。

3. 一旦我们将obj转换为对象,我们可以使用delete运算符来删除其中的属性。

下面是解决该问题的代码示例:

var obj = {
  "firstName": "James",
  "lastName": "Bond"
};
function removeSquareBrackets(obj) {
  if (Array.isArray(obj)) {
    obj = obj.reduce(function(acc, val, i) {
      acc[i] = val;
      return acc;
    }, {});
  }
  
  delete obj["firstName"];
  
  return obj;
}
console.log(removeSquareBrackets(obj));

解释:上述代码首先检查obj是否是一个数组。如果是数组,它将使用Array.reduce()方法将其转换为对象。然后,它使用delete运算符删除了obj对象中的"firstName"属性。最后,函数返回更新后的obj对象。

这样,我们就可以通过 removeSquareBrackets() 函数来检查对象中是否存在指定的属性,并且即使obj是一个数组,我们也能够正确删除属性。

0
0 Comments

问题的出现的原因是,作者想要检查对象是否具有在函数参数中提到的属性,但是作者在代码中错误地使用了数组的语法来访问对象,导致逻辑出现问题。

解决方法是,首先要正确使用对象的语法来访问对象的属性。其次,使用对象的hasOwnProperty方法来检查对象是否具有指定的属性。在if条件语句中,不需要对hasOwnProperty方法的返回值进行额外的判断,因为该方法本身就返回一个布尔值。

以下是解决问题的代码示例:

var obj = {
  "firstName": "James",
  "lastName": "Bond"
};
function propExists(prop) {
  if (obj.hasOwnProperty(prop)) {
    return "属性存在";
  } else {
    return "属性不存在";
  }
}
console.log(propExists("Date of birth"));

以上代码将输出"属性不存在",因为对象obj中没有名为"Date of birth"的属性。

更多信息可以查看以下DEMO链接:[DEMO](http://jsfiddle.net/sykofvkL/6/)

作者在问题中提到自己尝试过使用循环来遍历对象,但是仍然无法解决问题。

0