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。如果你问我的话,那就是奇怪的行为。