提问者:小点点

使用`status==true`时,布尔条件始终为false


所以我刚刚开始学习javascript,我现在在函数模块中,我正在玩它,突然我遇到了一个疑问:

这是为什么:

if(x==true){
 return 1;
}

与此不同的是:

if(x){
 return 1;
}

你看,我有这个代码:

function isAdult(age){
    if(age >= 18){
        return true;
    }
    return false;
}

function nameAndAge(string, boolean){
    if(boolean == true){

        var my_string = string + " is adult";
        return my_string
    }
    var my_string = string + " is under age";
    return my_string

}

var talisa_age = 22;
var talisa_name = "Talisa Maegyr";

var status = isAdult(talisa_age);

var str = nameAndAge(talisa_name,status);
console.log(str)

不管“talisa_age”值如何,我都得到以下输出:

"Talisa Maegyr is under age"

但是,如果我改变了nameandage的验证

if(boolean){
        var my_string = string + " is adult";
        return my_string
}

代码按预期运行。。。


共1个答案

匿名用户

如果您console.log(status),您将看到它是一个字符串。 为什么? 答案是status是一个特殊的变量,window.status,它不再对窗口状态有任何影响,但是当它被赋值时,它仍然被转换回字符串(可能是为了显示)。

因此,您的条件是if(“true”==true),即使使用强制也是false。 将其更改为if(“true”)是有效的,因为非空字符串是truthy。

将您的变量更改为诸如status之类的其他内容,您将看到它可以工作。 更好的是,使用const status,它无论如何都比var好,可以帮助防止像这样的奇怪的bug。