我将测试'session'属性是否存在:

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),因此它们将不会具有您期望在该对象上使用的任何典型方法。

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

解决该错误的方法是显式调用Object上的hasOwnProperty并将其绑定(bind)到该对象,如下所示:

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

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

09-25 18:34