量子二重性:变量同时为 null 和 undefined 吗?

5
考虑以下 JavaScript 代码(在 Firefox 中测试):
function f(a) {

  if (a == undefined) {
    alert('undefined');
  }

  if (a == null) {
    alert('null');
  }
}

f();

两个警报都显示了,表明两个语句都是真的。

你能提供一个合理的解释吗?

1个回答

10

==是一种“软”相等运算符。
它使用类型转换将两个等效的对象比较为相等。

以下所有说法都是正确的:

42 == "42"
0 == false
0 == ""
[] == ""
{} == "[object Object]"
'/(?:)/' == new RegExp

相反,你应该使用===运算符,它检查严格相等性。


它变得更好了:[[[[[[[[[[2]]]]]]]]]] == 2 - Matt Ball
+1 不知道正则表达式和它的字符串等价形式是真的:'/(?:)/' == /(?:)/ -> 真的!! - slebetman
即使 '/x/' == /x/ -> true,'/x/' == /y/ -> false! - slebetman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接