我正在获取自定义标头值,并且收到的值正确。期望值为: 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
我可能做错了,但我真的找不到地方。
答案 0 :(得分:4)
您在isMobileDevice
中获得的值不是布尔值(true
,false
),而是字符串('true'
,'false'
)。
在布尔上下文中进行评估时,两者都等效于true
(布尔)。
您应该将isMobileDevice
与字符串进行比较:
if (isMobileDevice === 'true') {
// do something
} else {
// do something else
}
在布尔上下文(即作为条件)中使用时,false
,0
,""
,null
,undefined
和NaN
是被视为false
,所有其他值都被视为true
。
阅读有关JavaScript中 truthy 值的更多信息:
https://developer.mozilla.org/en-US/docs/Glossary/Truthy
答案 1 :(得分:2)
还要检查这些值是否也是字符串,而不仅仅是布尔值,因为false
与'false'
不同。与true
和'true'
相同。
let isMobileDevice = req.headers["is-mobile-device"];
console.log(isMobileDevice);
if(isMobileDevice==true || isMobileDevice=='true') {
console.log("Mobile client");
return res.sendStatus(200);
}
else {
console.log("Web Client");
return res.sendStatus(200);
}
答案 2 :(得分:0)
不是很懂javascript,但是...
很可能是因为isMobileDevice是字符串类型,只要不是“”“,它将始终为true
尝试if(isMobileDevice ==“ true”)
答案 3 :(得分:0)
您还可以如下更改if condition
if (Boolean(isMobileDevice)) {
// do something
} else {
// do something else
}