如何检查对象是否不具有函数参数中提到的属性?
如何检查对象是否不具有函数参数中提到的属性?
我想通过将变量传递给参数,使用函数来检查该属性是否存在于对象中。我尝试了三种最常用的方法来检查对象的现有属性,但仍然得到了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("出生日期"));
问题的出现原因:在给定的代码中,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是一个数组,我们也能够正确删除属性。
问题的出现的原因是,作者想要检查对象是否具有在函数参数中提到的属性,但是作者在代码中错误地使用了数组的语法来访问对象,导致逻辑出现问题。
解决方法是,首先要正确使用对象的语法来访问对象的属性。其次,使用对象的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/)
作者在问题中提到自己尝试过使用循环来遍历对象,但是仍然无法解决问题。