测试未定义,JS 失败

问题描述 投票:0回答:1

在 Express 应用程序中,我在中间件中有以下 JS 代码(服务器端)来检查用户是否提供了足够的令牌。这只是我的问题的相关部分:

const authHeader = req.headers['authorization']
console.log("authHeader : ", authHeader)

if (authHeader === undefined) console.log("authHeader === undefined")
else console.log("authHeader !== undefined")

if (authHeader == undefined) console.log("authHeader == undefined")
else console.log("authHeader != undefined")

if (authHeader.valueOf() === undefined) console.log("authHeader === undefined")
else console.log("authHeader !== undefined")

if (authHeader.valueOf() == undefined) console.log("authHeader == undefined")
else console.log("authHeader != undefined")

if (typeof authHeader === 'undefined') console.log("authHeader === undefined")
else console.log("authHeader !== undefined")

if (typeof authHeader == 'undefined') console.log("authHeader == undefined")
else console.log("authHeader != undefined")

可以看到,上面的代码除了获取传入参数并对其进行测试之外没有做太多事情,但这是服务器日志中的结果:

app[web.1]: authHeader :  undefined
app[web.1]: authHeader !== undefined
app[web.1]: authHeader != undefined
app[web.1]: authHeader !== undefined
app[web.1]: authHeader != undefined
app[web.1]: authHeader !== undefined
app[web.1]: authHeader != undefined

console.log() 显示 authHeader 未定义。 但以下测试均未证实这一点。 它们都将 authHeader 显示为未定义。

这是为什么?

我已经用了所有我能想到的方法来进行测试,但似乎都错了。

附注

知道我进行测试的方式,我预计 authHeader 是未定义的。

我没想到的是,没有一个测试会这么说。

javascript express undefined
1个回答
0
投票

所以某个“未定义”潜入了。

您可能想要更明确

if (authHeader == null) { // Catches both `null` and `undefined`
  console.log("authHeader is truly undefined or null");
} else if (authHeader === "undefined") {
  console.error("authHeader contains the string 'undefined', which is unexpected");
} else if (!authHeader) { // Catches falsy values like "", false, or 0
  console.warn("authHeader is falsy but not undefined or null:", authHeader);
} else {
  console.log("authHeader has a valid value:", authHeader); // you might even want to add a length check here
}
© www.soinside.com 2019 - 2024. All rights reserved.