Javascript Node.js hasOwnProperty即使在该属性存在时也不起作用

Javascript Node.js hasOwnProperty即使在该属性存在时也不起作用,javascript,node.js,hasownproperty,Javascript,Node.js,Hasownproperty,在my Node.js Express应用程序中,当用户通过passport登录时,用户对象将保存在请求中 它看起来像这样: { "uuid": "caa5cb58-ef92-4de5-a419-ef1478b05dad", "first_name": "Sam", "last_name": "Smith", "email": "sam@email.com", "password": "$2a$10$fXYBeoK6s.A8xo2Yfgx4feTLRXpd

在my Node.js Express应用程序中,当用户通过passport登录时,用户对象将保存在请求中

它看起来像这样:

{
    "uuid": "caa5cb58-ef92-4de5-a419-ef1478b05dad",
    "first_name": "Sam",
    "last_name": "Smith",
    "email": "sam@email.com",
    "password": "$2a$10$fXYBeoK6s.A8xo2Yfgx4feTLRXpdvaCykZxr7hErKaZDAVeplk.WG",
    "profile_uuid": "db172902-f3c9-456d-8814-53d07d4ea954",
    "isActive": true,
    "deactivate": false,
    "verified": true,
    "ProviderUuid": "7149f8f1-0208-41db-a78e-887e7811a169"
}
但并非每个用户都有ProviderUuid密钥。因此,在使用其值之前,我试图检查用户对象中是否存在ProviderUuid密钥

var user = req.user;
console.log('---- provider: ' + JSON.stringify(user));
console.log('--- prop: ' + user.hasOwnProperty('ProviderUuid')); //returns false
console.log('---- other method prop check: ' + Object.prototype.hasOwnProperty.call(user, "ProviderUuid")); //returns false
if('ProviderUuid' in user){
    //this returns true
}
这样做
user.hasOwnProperty('ProviderUuid'
)和
Object.prototype.hasOwnProperty.call(用户,“ProviderUuid”)
返回false,而
中的
'ProviderUuid'返回true


这里我缺少什么?

因为
中起作用,所以属性必须是继承的属性,位于
user
的原型对象之一,而不是
user
本身。以下是此类行为的一个活生生的例子:

constuserproto={foo:'bar'};
//创建名为“user”的空对象,其内部原型为“userProto”:
const user=Object.create(userProto);
//False,用户本身是空对象,未为其分配任何内容:
console.log(
user.hasOwnProperty('foo')
);
//True,`foo`确实存在于`user`对象的*内部原型*上:
console.log(
用户中的“foo”
);
//True,`foo`是直接位于`userProto`上的属性:
console.log(
userProto.hasOwnProperty('foo')

);
由于
中起作用,因此属性必须是继承的属性,位于
用户
的原型对象之一上,而不是位于
用户
本身上。以下是此类行为的一个活生生的例子:

constuserproto={foo:'bar'};
//创建名为“user”的空对象,其内部原型为“userProto”:
const user=Object.create(userProto);
//False,用户本身是空对象,未为其分配任何内容:
console.log(
user.hasOwnProperty('foo')
);
//True,`foo`确实存在于`user`对象的*内部原型*上:
console.log(
用户中的“foo”
);
//True,`foo`是直接位于`userProto`上的属性:
console.log(
userProto.hasOwnProperty('foo')

);我测试了代码,所有检查都返回true

var用户={
“uuid”:“caa5cb58-ef92-4de5-a419-ef1478b05dad”,
“名字”:“山姆”,
“姓氏”:“史密斯”,
“电子邮件”:sam@email.com",
“密码”:“$2a$10$fXYBeoK6s.A8xo2Yfgx4feTLRXpdvaCykZxr7hErKaZDAVeplk.WG”,
“剖面图”:“db172902-f3c9-456d-8814-53d07d4ea954”,
“isActive”:是的,
“停用”:错误,
“验证”:正确,
“ProviderUuid”:“7149f8f1-0208-41db-a78e-887e7811a169”
};
log('----提供程序:'+JSON.stringify(用户));
console.log('--prop:'+user.hasOwnProperty('ProviderUuid')//返回false
log('----其他方法属性检查:'+Object.prototype.hasOwnProperty.call(用户,“ProviderUuid”)//返回false
if(用户中的“ProviderUuid”){
//这是真的

}
我测试了代码,所有检查都返回true

var用户={
“uuid”:“caa5cb58-ef92-4de5-a419-ef1478b05dad”,
“名字”:“山姆”,
“姓氏”:“史密斯”,
“电子邮件”:sam@email.com",
“密码”:“$2a$10$fXYBeoK6s.A8xo2Yfgx4feTLRXpdvaCykZxr7hErKaZDAVeplk.WG”,
“剖面图”:“db172902-f3c9-456d-8814-53d07d4ea954”,
“isActive”:是的,
“停用”:错误,
“验证”:正确,
“ProviderUuid”:“7149f8f1-0208-41db-a78e-887e7811a169”
};
log('----提供程序:'+JSON.stringify(用户));
console.log('--prop:'+user.hasOwnProperty('ProviderUuid')//返回false
log('----其他方法属性检查:'+Object.prototype.hasOwnProperty.call(用户,“ProviderUuid”)//返回false
if(用户中的“ProviderUuid”){
//这是真的
}
请检查可能有助于您可以请检查演示:其返回为真。请检查可能有助于您可以请检查演示:其返回为真。