Hen*_*nry 7 javascript 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')
}
Run Code Online (Sandbox Code Playgroud)
它的结果是:
[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
Run Code Online (Sandbox Code Playgroud)
为什么 hasOwnProperty 不起作用?
Ell*_*son 12
JavaScript 中的大多数对象都继承自 Object;有可能有意创建从无继承的对象(即null),因此它们不会有任何您希望存在于对象上的典型方法。
您通常会知道您的代码是否正在执行此操作,因此该对象可能是从另一个库传递给您的东西。
解决该错误的一种方法是 hasOwnProperty 显式调用Object,并将其绑定到该对象,如下所示:
// Calls "hasOwnProperty" on queryData, even if queryData has
// no prototype:
console.log(Object.hasOwnProperty.bind(queryData)('session'));
Run Code Online (Sandbox Code Playgroud)
编辑:只是编辑以添加意见,这是为了您的目的更好的行是 simple truthy check if (queryData.session) {。当您问的是“会话是否通过?”时,这种检查的模糊性是一种优势。- 如果 session 为空、未定义、false、空字符串或完全丢失密钥,则答案显然是“否”。
| 归档时间: |
|
| 查看次数: |
12787 次 |
| 最近记录: |