我正在获取自定义 header 值,并且我收到的值是正确的。预期值为:true、false、undefined。
然而,基于这样的值的响应:false是不正确的。
片段
let isMobileDevice = req.headers["is-mobile-device"];
console.log(isMobileDevice);
if(isMobileDevice) {
console.log("Mobile client");
return res.sendStatus(200);
}
else {
console.log("Web Client");
return res.sendStatus(200);
}
输出
[0] undefined
[0] Web Client
[0] POST /api/v1/authorization 200 92.690 ms - 2
[0] false
[0] Mobile client
[0] POST /api/v1/authorization 200 76.601 ms - 2
[0] true
[0] Mobile client
[0] POST /api/v1/authorization 200 74.978 ms - 2
我可能做错了什么,但我真的找不到哪里。
最佳答案
您在 isMobileDevice
中获取的值不是 bool 值(true
、false
),而是字符串('true'
、'false'
)。
当在 bool 上下文中求值时,两者都相当于 true
( bool 值)。
您应该将 isMobileDevice
与字符串进行比较:
if (isMobileDevice === 'true') {
// do something
} else {
// do something else
}
在 bool 上下文(即作为条件)中使用时,false
、0
、""
、null
、undefined
和 NaN
被视为 false
,所有其他值均被视为 true
。
阅读有关 JavaScript 中 truthy 值的更多信息:
https://developer.mozilla.org/en-US/docs/Glossary/Truthy
关于javascript - bool 值 if 语句的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55411187/