我用Javascript编写的一段非常简单的代码有问题,你能帮帮我吗?
以下是我认为到目前为止我对javascript和变量的理解:
我在一个在线课程中找到了一个练习文件,我试图这样做,但是我没有在课程中得到相同的结果; 主要问题是我通过"if value == false {...}"比较值,而解决方案是使用"if!value {...}"
所以我决定写一个非常短的代码,以便自己尝试,但我的结果好坏参半.在下面的示例中,我希望这个JS代码生成两个相同的警报("foo等于false"),但是第一个if语句返回"foo IS not equal false",而第二个if返回(如预期的那样) "foo等于假".
这就是我写的:
var foo = undefined;
if (foo == false) {
alert("foo is equal to false");
} else {
alert("foo is not equal to false"); // Javascript executes this row
}
if (!foo) {
alert("foo is equal to false"); // Javascript executes this row
} else {
alert("foo is not equal to false");
}
Run Code Online (Sandbox Code Playgroud)
AFAIK这两个IF应该做同样的工作,事实上当我尝试通过在第一行替换值"var foo = undefined;"时 用"var foo = 0;" 它按预期工作,0是另一个应该被评估为false的值,或者至少这是我记得的.
你能告诉我我做错了什么吗?
小智 41
该 ==算法(摘要相等比较算法)是不是在那里你可以简单地假设一个结果,除非你知道的算法.您需要了解其工作原理的详细信息.
例如,null并且undefined是一个特例.除了被认为彼此相等之外,它们不进行任何类型转换.
否则,通常会进行类型转换,尝试将两个操作数减少为通用类型.这通常最终成为toNumber转换.
这就是为什么:
null == undefined; // true
null == 0; // false
+null == '0' // true
因此,如果你知道算法是如何工作的,你知道undefined除了undefined和之外永远不等于任何东西null,但是其他不严格相等的类型可能被强制转换为相等的类型.
所以做if(!x)vs if(x==false)是完全不同的测试.
if(!x)执行toBoolean转换.
if(x == false) 使用复杂的算法来决定正确的转换.
所以......
if(x == false)
Run Code Online (Sandbox Code Playgroud)
......如果x是undefined,则确定不等于false,但如果x是0或甚至"0",它将被视为等于false.
0 == false; // true
"0" == false; // true
kaz*_*kaz 12
undefined不等于false,但是当你试图评价时:
if (undefined)
Run Code Online (Sandbox Code Playgroud)
整个表达总是假的
更多信息:http://www.mapbender.org/JavaScript_pitfalls : _null, _false,_undefined,_NaN
真与等true是JavaScript中的两件事。
该if (...)如果执行的第一个语句...是“ truthy ”,而不是当他们是“平等”到任何其他特定值,那么你的第二个条件应该像
if (!foo) {
alert("foo is falsy"); // Javascript executes this row
} else {
alert("foo is truthy");
}
Run Code Online (Sandbox Code Playgroud)
有相当多的“falsy”值在JavaScript: ,NaN,"",0,-0,false,。null undefined其他所有值为truthy。
该!运营商的回报false的任何truthy价值,true任何falsy价值,所以!x是一样的(x ? false : true)所有x。
| 归档时间: |
|
| 查看次数: |
42902 次 |
| 最近记录: |