gpt4 book ai didi

javascript - 对象方法的不一致行为 'hasOwnProperty'

转载 作者:行者123 更新时间:2023-11-29 18:55:28 29 4
gpt4 key购买 nike

问题陈述:

如果对象具有与 JavaScript 预定义的 方法 相同的 property 名称。它无法执行并给出以下错误。

Uncaught TypeError: obj.hasOwnProperty is not a function

代码:

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

代码解释:

在上面的代码片段中,我试图检查 objectkey 是否存在。

因此,在第一个 console 语句中,它返回 true 作为 obj1 具有名为 key2 的属性,但它失败了当将名为 "hasOwnProperty": "value3" 的新属性添加到对象中时。

正如我们所知,使用 JavaScript 对象方法名称作为对象 属性 不是一个好的做法,但 API 团队不了解 JavaScript 预定义方法。因此,他们可以在 API 响应中发送它。

期望:

我想使用 hasOwnProperty() 方法检查 key2 是否存在于 obj2 中,或者没有 hasOwnProperty其中的属性(property)。

最佳答案

您可以通过使用原型(prototype)方法和 call 将您的对象作为第一个参数传递来解决这个问题:

var obj2 = {
"key1":"value1",
"key2":"value2",
"hasOwnProperty": "value3"
}

console.log(Object.prototype.hasOwnProperty.call(obj2, 'key2'));

使用 {} 而不是 Object.prototype 会更短一些,但这会产生一些极小的开销:

{}.hasOwnProperty.call(obj2, 'key2')

备注

您用来访问hasOwnProperty 属性的对象实际上是无关紧要的,只要它继承自Object.prototype。所以你可以通过使用一些其他不相关(或看似相关)的对象使事情看起来复杂:

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')

...等等;-)

关于javascript - 对象方法的不一致行为 'hasOwnProperty',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49650399/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com