如果检查该变量是否为布尔值的语句将导致“布尔值!=布尔值”

时间:2019-08-21 14:06:01

标签: javascript error-handling boolean-logic

我试图在一些检查是否启用了特定字段的函数中加入一些错误。我想添加一些条件检查,以确保函数的特定参数始终为布尔值(即,用于验证该字段为true的真值/用于验证该字段为false的真值),因为我注意到我的函数不会产生错误如果使用了其他数据类型。

因此,我设置了一些测试代码,该代码还允许用户使用某些字符串代替真正的布尔值。看起来像这样: (注意:我们正在使用Squish进行GUI测试并使用其一些内部功能)

function boolCheck(bool)
{
    var truth = ["true","True","TRUE","T","t"];
    var lies = ["false","False","FALSE","F","f"];

    if (truth.indexOf(bool) !== -1)
    {
        bool = true;
    }
    if (lies.indexOf(bool) !== -1)
    {
        bool = false;
    }
    else if (bool !== true || bool !== false)
    {
        test.fatal("ERROR: " + (typeof bool).toUpperCase() + " is not a BOOLEAN data type.");
    }
}


function main()
{
    boolCheck(true);
}

运行此命令会在本质上是控制台的位置上显示以下结果(测试。[something]基本上类似于打印到控制台)

Fatal ERROR: BOOLEAN is not a BOOLEAN data type.

这对我来说很奇怪。

进一步,在main中运行它:

function main()
{
    boolCheck("T")
}

给出以下结果:

Fatal ERROR: BOOLEAN is not a BOOLEAN data type.

显然,如何处理所有问题。也许我只是以错误的方式来做这件事。谁能提供一些关于“ BOOLEAN”和“ BOOLEAN”为何不相等的见解?还是处理此期间的更好方法?例如,我很想想一种将所有内容包装在“尝试/捕获”中的好方法。

2 个答案:

答案 0 :(得分:2)

简单逻辑错误

if (bool !== true || bool !== false)

所以让我们大声读出来吧。如果bool不等于true或bool不等于false,请进入此块。

因此,当bool为true时,它不是假的,因此它将进入if块。

如果bool不等于true AND bool不等于false,则需要

答案 1 :(得分:0)

为什么不使用npm模块 boolean

符合您的要求

    const boolean = require('boolean');

    console.log(boolean('t')) // true
    console.log(boolean('True')) // true
    console.log(boolean(true)) // true
    console.log(boolean('TrUe')) // true
    console.log(boolean('TRUE')) // true
    console.log(boolean('true')) // true

    console.log(boolean('f')) // false
    console.log(boolean('False')) // false
    console.log(boolean(false)) // false
    console.log(boolean('FaLsE')) // false
    console.log(boolean('FALSE')) // false
    console.log(boolean('false')) // false