所以我刚刚开始学习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
}
代码按预期运行。。。
如果您console.log(status)
,您将看到它是一个字符串。 为什么? 答案是status
是一个特殊的变量,window.status
,它不再对窗口状态有任何影响,但是当它被赋值时,它仍然被转换回字符串(可能是为了显示)。
因此,您的条件是if(“true”==true)
,即使使用强制也是false。 将其更改为if(“true”)
是有效的,因为非空字符串是truthy。
将您的变量更改为诸如status
之类的其他内容,您将看到它可以工作。 更好的是,使用const status
,它无论如何都比var
好,可以帮助防止像这样的奇怪的bug。