javascript - hasOwnProperty 不是 Node.js 中的函数?
问题描述
我将测试“会话”属性是否存在:
console.log(queryData)
console.log(typeof queryData)
if ('session' in queryData) {
console.log('in')
}
else {
console.log('not in')
}
if (queryData.hasOwnProperty('session')) {
console.log('has own propety')
}
其结果是:
[Object: null prototype] { session: '0geBdiCsfczLQiT47dd45kWVN2Yp' }
object
in
/home/ubuntu/22.enmsg/cli/main.js:72
if (queryData.hasOwnProperty('session')) {
^
TypeError: queryData.hasOwnProperty is not a function
为什么 hasOwnProperty 不起作用?
解决方案
javascript 中的大多数对象都继承自 Object;可以有意地创建从无继承的对象(即null
),因此它们不会具有您期望在对象上存在的任何典型方法。
您通常会知道您的代码是否正在执行此操作,因此该对象可能是从另一个库传递给您的东西。
解决该错误的一种方法是显式调用hasOwnProperty
Object,并将其绑定到对象,如下所示:
// Calls "hasOwnProperty" on queryData, even if queryData has
// no prototype:
console.log(Object.hasOwnProperty.bind(queryData)('session'));
编辑:只需编辑以添加意见,即为您的目的更好的线路是简单的真值检查if (queryData.session) {
。当您要问的是“会话是否通过了?”时,这种检查的模糊性是一种优势。- 如果 session 为 null、undefined、false、空字符串,或者键完全丢失,答案显然是“否”。
推荐阅读
- django - 如何限制草莓-graphql(Django实现)中的查询深度?
- android - Android onDestroy() 方法未按预期工作
- laravel - Laravel Scout - 刷新命令不起作用
- amazon-web-services - AWS EMR 和 Apache Atlas - Atlas 元数据的持久存储
- vb.net - 我需要在 VB Windows 服务中使用 AspNetUser Validation
- python - 获取 conda 环境中用户安装包的列表(无依赖项)
- php - 允许在 Wordpress 上注册的用户无需通过电子邮件发送给用户的链接确认激活即可登录
- python - 我的路线 /favicon.ico 在我的烧瓶实例中不起作用
- python - 生成具有 N 列的数组,行和等于 1
- reactjs - 如何在spring boot +react中实现CSRF