2015-04-03 122 views
0

是否有可能判断继承的对象属性是否设置为未定义或完全不存在?继承的属性检查

我有一个格式化字符串,其中包含一个属性名称和一个预期包含该属性的对象。我不在乎属性是对象自己还是继承的,我需要知道它是否存在以便我可以使用它,即使它被设置为未定义,但如果它根本不存在,我需要抛出一个错误。

我知道究竟有多少次这个问题已经被周围的人跳舞,有这么多的意见如何使用:

if(prop in obj){ 
} 

这一个:

obj.hasOwnProperty(prop) 

虽然我显然不能用第二,当涉及到所有可能的财产价值时,第一种方法似乎不可靠。

是否有一种可靠的方法来检查某个特定属性是存在于对象中还是继承的,即使它的值设置为0或null或未定义?

+2

*当涉及到所有可能的属性值时,第一种方法似乎不可靠。*什么让你这么想? 'var foo = {bar:undefined}; “bar”in foo => true' – 2015-04-03 12:38:55

+0

在这个问题中的很多评论:http://stackoverflow.com/questions/11040472/check-if-object-property-exists-using-a-variable – 2015-04-03 12:43:59

+0

唯一相关和正确的评论我能找到的是那个说'in'不能和字符串一起工作的人。你确定这是你的用例中的一个问题吗? – 2015-04-03 12:46:48

回答

3

if(prop in obj)当涉及到所有可能的属性值时,它似乎不可靠。

不。in operator根本不关心数值,它只检查属性名称。这正是你想要的。

+0

按照我的问题的所有意见,我觉得这个答案很有说服力。谢谢! – 2015-04-03 13:01:29