我正在寻找的基本上是一个hasOwnProperty()或'in'函数,它是递归的,并在链中查看对象中是否存在键或属性。如何检查一个对象或其子对象/子对象是否具有Javascript中的属性/键?
比如我有对象:
var user = {
username: "Derpette",
profile: {
role: 'admin',
sex: 'female',
emails:['[email protected]']
}
}
我想知道是否有在该对象或其子对象的关键/属性“角色”的任何地方。 所以我想打电话给user.hasProperty('role')
,它会返回true
。
现在我正在使用带有断言链的if语句来检查它,但它看起来并不干净,特别是对于深层嵌套属性。
例如,我会做:
if(user && user.profile && user.profile.role){
//Manipulate/Use user.profile.role here
}
用例此的另一个例子是,如果我的MongoDB过滤更新修饰符从客户的到来。我想确保他们没有更新自己的角色,所以我需要检查属性'角色'是不是在他们的mongoDB修饰符json对象的某处。但它可能在修饰符中的一些地方,因此if属性链接对于这种情况不起作用。
我是否需要编写自己的递归hasOwnProperty?我在想,像这样的东西应该已经存在于像jquery或underscores.js或sugar.js这样的项目中,但我似乎无法找到它。
我敢肯定没有一个。但你可以很容易地做出这样的功能 – Ian
例如:http://jsfiddle.net/N82aZ/2/ – Ian