Javascript hasOwnProperty(键)==false,但属性存在
我有一个名为Javascript hasOwnProperty(键)==false,但属性存在,javascript,javascript-objects,Javascript,Javascript Objects,我有一个名为context的对象和以下日志: console.log({ 上下文 “Object.keys(上下文)”:Object.keys(上下文), 'context.hasOwnProperty(“状态”):context.hasOwnProperty(“状态”), “context.status”:context.status, }); 以下是输出: 上下文 缓存:InMemoryCache 客户:阿波罗客户 客户意识{…} forceFetch:false getCacheKey:
context
的对象和以下日志:
console.log({
上下文
“Object.keys(上下文)”:Object.keys(上下文),
'context.hasOwnProperty(“状态”):context.hasOwnProperty(“状态”),
“context.status”:context.status,
});
以下是输出:
上下文
缓存:InMemoryCache
客户:阿波罗客户
客户意识{…}
forceFetch:false
getCacheKey:f()
现状:3
key(上下文):数组(5)
0:“forceFetch”
1:“缓存”
2:“getCacheKey”
3.“客户意识”
4:“客户”
context.hasOwnProperty(“状态”):false
context.status:未定义
怎么可能定义了status
属性,并且该属性的值为3,但是“Object.keys”、“hasOwnProperty”和访问它表明它不存在
更新
这是我的密码。如果打开/apollo/resolvers/bar
,您将看到上下文
对象的日志
更新2
我知道发生了什么事。我的GraphQL查询中字段的顺序不正确,因为记录上下文的解析程序是在状态为
的解析程序之前定义的。请参阅下面我的答案。确保您的属性是可枚举的。
在您创建此对象的地方使用更多代码进行响应[请参见此处][1]事实证明,此问题是由阿波罗的怪异行为引起的
在我的GraphQL查询中,我在解析程序下面定义了状态
,在这里我记录了上下文的值
:
query Foo {
id
bar @client
status @client
}
将状态
移到顶部可解决此问题:
query Foo {
id
status @client
bar @client
}
你能展示你创建上下文对象的代码吗???你听说过“原型”吗?@srivenkatapavankumarms它是用Apollo客户端构建的本地解析器系统的一部分。所以“上下文”对象是由阿波罗创造的library@ASDFGerte所以阿波罗在某个地方修改了原型,但没有修改对象?最简单的方法是分析对象-例如,查看上下文。通常,在调试器中查看对象。hasOwnProperty
不关心可枚举性。它不必是可枚举的。这只适用于Object.keys()
返回的内容这就是为什么我要求他用更多的代码来响应。他所说的在正常情况下是不可能的。但是,context.status
如何返回undefined?将status
移到顶部后,context.status
返回正确的值,即3。但是,如果在栏
之后定义了状态
,则是的,上下文。在打印包含的整个对象时,状态
未定义为值3。如果你问我的话,那就是奇怪的行为。