[英]Inconsistent behaviour of object method 'hasOwnProperty'
问题陈述 :
如果对象具有与JavaScript预定义method
相同的property
名称。 它执行失败并给出以下错误。
未捕获的TypeError:obj.hasOwnProperty不是函数
代码:
var obj1 = { "key1":"value1", "key2":"value2" } console.log(obj1.hasOwnProperty('key2')); // true var obj2 = { "key1":"value1", "key2":"value2", "hasOwnProperty": "value3" } console.log(obj2.hasOwnProperty('key2')); // Uncaught TypeError: obj.hasOwnProperty is not a function
代码说明:
在上面的代码片段中,我试图检查object
的key
是否存在。
因此,在第一个console
语句中,它以具有名为key2
属性的obj1
返回true
,但是当将名为"hasOwnProperty": "value3"
新属性添加到对象中时,它将失败。
众所周知,使用JavaScript对象方法名称作为对象property
不是一个好习惯,但是API团队并不了解JavaScript预定义方法。 因此,他们可以在API响应中发送它。
期望值:
我想使用hasOwnProperty()
方法检查key2
存在于obj2
,是否具有hasOwnProperty
属性。
任何帮助将是非常可贵的。 谢谢
您可以通过使用prototype方法并call
将对象作为第一个参数传递来解决该问题:
var obj2 = { "key1":"value1", "key2":"value2", "hasOwnProperty": "value3" } console.log(Object.prototype.hasOwnProperty.call(obj2, 'key2'));
使用{}
代替Object.prototype
短一点,但这会产生一些Object.prototype
开销:
{}.hasOwnProperty.call(obj2, 'key2')
只要它继承自Object.prototype
,则用于访问hasOwnProperty
属性的对象实际上是无关紧要的。 因此,可以通过使用其他一些不相关(或看似相关)的对象使事情看起来复杂:
Math.hasOwnProperty.call(obj2, 'key2')
Function.hasOwnProperty.call(obj2, 'key2')
obj1.hasOwnProperty.call(obj2, 'key2')
"".hasOwnProperty.call(obj2, 'key2')
NaN.hasOwnProperty.call(obj2, 'key2')
JSON.hasOwnProperty.call(obj2, 'key2')
Object.hasOwnProperty.call(obj2, 'key2')
...等;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.