首页 > 解决方案 > 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 不起作用?

标签: javascriptnode.js

解决方案


javascript 中的大多数对象都继承自 Object;可以有意地创建从无继承的对象(即null),因此它们不会具有您期望在对象上存在的任何典型方法。

您通常会知道您的代码是否正在执行此操作,因此该对象可能是从另一个库传递给您的东西。

解决该错误的一种方法是显式调用hasOwnPropertyObject,并将其绑定到对象,如下所示:

// Calls "hasOwnProperty" on queryData, even if queryData has
// no prototype:
console.log(Object.hasOwnProperty.bind(queryData)('session'));

编辑:只需编辑以添加意见,即为您的目的更好的线路是简单的真值检查if (queryData.session) {。当您要问的是“会话是否通过了?”时,这种检查的模糊性是一种优势。- 如果 session 为 null、undefined、false、空字符串,或者键完全丢失,答案显然是“否”。


推荐阅读