未定义的变量,value == false与!value的比较。

25 浏览
0 Comments

未定义的变量,value == false与!value的比较。

我在JavaScript中遇到了一个非常简单的代码问题,你能帮我吗?

以下是我对JavaScript和变量的理解:

  • 在布尔运算中,未定义的值被评估为假
  • 使用==运算符进行比较时,你是在询问两个值是否可比较,而不考虑它们的类型

我在一个在线课程中找到了一个练习文件,我尝试去做,但是得到的结果和课程中预期的结果不同;主要问题是我使用了"if value == false { ... }"这样的比较,而正确的解决方案是使用"if !value { ... }"

所以我决定写一个非常简短的代码来自己尝试一下,但是我得到了混合的结果。在下面的示例中,我希望这段JS代码生成两个相同的警告("foo is equal to false"),但是第一个if语句返回"foo IS NOT equal to false",而第二个if语句返回(如预期的)"foo is equal to false"。

这是我编写的代码:

var foo = undefined;
if (foo == false) {
  alert("foo is equal to false");
} else {
  alert("foo is not equal to false"); // JavaScript执行了这一行
}
if (!foo) {
  alert("foo is equal to false");  // JavaScript执行了这一行
} else {
  alert("foo is not equal to false");
}

据我所知,这两个if应该做相同的工作,事实上,当我尝试将第一行的值"var foo = undefined;"替换为"var foo = 0;"时,它按预期工作了,0也是一个应该被评估为假的值,或者至少这是我记得的。

你能告诉我我做错了什么吗?

0