Emi*_*era 19 javascript boolean
所以我刚开始学习 javascript,我现在在函数模块中,我正在玩它,突然我遇到了一个疑问:
为什么是这样:
if(x==true){
return 1;
}
Run Code Online (Sandbox Code Playgroud)
与此不同:
if(x){
return 1;
}
Run Code Online (Sandbox Code Playgroud)
?
你看,我有这个代码:
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)
Run Code Online (Sandbox Code Playgroud)
无论“talisa_age”值如何,我都会得到以下输出:
"Talisa Maegyr is under age"
Run Code Online (Sandbox Code Playgroud)
但是,如果我将 nameAndAge 的验证更改为
"Talisa Maegyr is under age"
Run Code Online (Sandbox Code Playgroud)
代码按预期工作......
ggo*_*len 28
如果你console.log(typeof status)会看到它是一个字符串。为什么?答案是它status是一个特殊变量 ,window.status它不再对窗口状态栏产生任何影响,但在分配值时仍会转换回字符串(大概用于显示)。
该标准规定:
由于历史原因,对象
status上的Window属性必须在获取时返回它设置的最后一个字符串,并且在设置时必须将自身设置为新值。当Window对象被创建,必须将属性设置为空字符串。它不做任何其他事情。
因此,您的条件是if ("true" == true)*,即使使用强制也是错误的。将其更改为if ("true")似乎有效,因为非空字符串是真实的。
如果您将变量命名为其他类似status_程序正常行为的名称。更好的是,避免在全局范围内和/或使用变量声明,const或者let更可取var并且可以帮助防止像这样的奇怪错误。
问题的最小再现:
console.log(typeof status);
var status = 42;
console.log(typeof status);Run Code Online (Sandbox Code Playgroud)
一些可能的修复:
var status_ = 42;
console.log(typeof status_);
const status = 42;
console.log(typeof status);
(() => {
var status = 42;
console.log(typeof status);
})();Run Code Online (Sandbox Code Playgroud)
* : 请注意,某些浏览器将其window.status视为只读,例如 IE11。status就""在这种情况下,你会得到不同的异常行为。
进一步阅读:
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |