布尔值技巧if语句

时间:2019-03-29 05:46:52

标签: javascript node.js

我正在获取自定义标头值,并且收到的值正确。期望值为: 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

我可能做错了,但我真的找不到地方。

4 个答案:

答案 0 :(得分:4)

您在isMobileDevice中获得的值不是布尔值(truefalse),而是字符串('true''false')。
在布尔上下文中进行评估时,两者都等效于true(布尔)。

您应该将isMobileDevice与字符串进行比较:

if (isMobileDevice === 'true') {
    // do something
} else {
    // do something else
}

在布尔上下文(即作为条件)中使用时,false0""nullundefinedNaN是被视为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
}