javascript - 即使属性存在,Node.js hasOwnProperty 也不起作用

标签 javascript node.js hasownproperty

在我的 Node.js Express 应用程序中,当用户通过护照登录时,用户对象将保存在请求中。

它看起来像这样:

{
    "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 key 。因此,在使用其值之前,我尝试检查 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(user, "ProviderUuid")) 返回 false,但是 'ProviderUuid' in user 返回 true。

我在这里缺少什么?

最佳答案

由于 in 有效,该属性必须是 user 原型(prototype)对象之一上的继承属性,而不是 user 本身。这是此类行为的一个活生生的例子:

const userProto = { foo: 'bar' };

// Create an empty object named `user` whose internal prototype is `userProto`:
const user = Object.create(userProto);

// False, user itself is an empty object, nothing's been assigned to it:
console.log(
  user.hasOwnProperty('foo')
);

// True, `foo` does exist on the *internal prototype* of the `user` object:
console.log(
  'foo' in user
);

// True, `foo` is a property directly on `userProto`:
console.log(
  userProto.hasOwnProperty('foo')
);

因此,如果您想检查名为 ProviderUuid 的继承属性是否存在,请像您所做的那样使用 in 运算符。

关于javascript - 即使属性存在,Node.js hasOwnProperty 也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53293430/

相关文章:

javascript - 如何在数组中查找所有具有假值的对象?

javascript - 显示 ajax 结果数据保存

javascript - 带有 NuGet 的 Visual Studio javaScript 默认目录

javascript - JSZip 在解压缩时更改文件内容 (pdf)

javascript - FileReader.readAsDataURL 上传到 express.js

javascript - 获取图像 Angular 或 Node 的 Base64 的最佳方法

javascript - 是否有一种 jQuery 方法可以仅迭代对象自己的属性?

javascript - 排序函数正在更改我未排序的变量

javascript - 从node.js发送一个简单的json到index.html

javascript - 如何重命名javascript对象函数hasOwnProperty?