JavaScript和null之间的区别?

根据JavaScript中nullundefined的区别是什么?, nullundefined是Javascript中两个不同的对象(具有不同的类型)。 但是当我尝试这个代码

var a=null;
var b;
alert(a==null);      // expecting true
alert(a==undefined); // expecting false
alert(b==null);      // expecting false
alert(b==undefined); // expecting true

上面的代码的输出是:

true
true
true 
true

现在as ==只匹配值,我认为undefinednull必须具有相同的值。 所以我尝试了:

alert(null) - >给出null

alert(undefined) - >给出undefined

我不明白这怎么可能。

这是演示。

编辑

我知道===会给出预期的结果,因为undefinednull有不同的类型,但是在==的情况下,类型转换如何在Javascript中工作? 我们可以像在Java中那样进行显式类型转换吗? 我想对undefinednull应用手动类型转换。


您需要使用身份运算符=== ,而不是等号运算符== 。 通过这一更改,您的代码将按预期工作:

alert(a===null);      // true
alert(a===undefined); // false
alert(b===null);      // false
alert(b===undefined); // true

在这种情况下等号运算符失败的原因是因为它试图进行类型转换。 undefined的类型是undefined ,而nullobject的类型; 在试图比较这两者时,Javascript将两者都转换为false ,这就是为什么它最终认为它们是平等的。 另一方面,身份运算符不会进行类型转换,并且要求类型相等才能结束相等。

编辑感谢@ user1600680指出,上述不完全正确; ECMAScript规范将null-to-undefined定义为特殊情况,并且相等。 没有中间转换为false


类型转换的一个简单例子是数字到字符串:

console.log(5 == "5");    // true
console.log(5 === "5");   // false

上面的答案引用了Douglas Crockford的Javascript:The Good Parts:

[当操作数是相同类型时,“==”操作符]是正确的,但是如果它们是不同类型的,它们试图强制这些值。 他们所做的规则很复杂且难以理解。

如果你不相信这些规则是复杂而不可取的,那么快速浏览一下这些规则将会使你忽略这个概念。


undefinednull具有非常不同的语义含义。

undefined通常意味着“没有任何答复”, null表示“有答复,答复是什么。”

例如,如果我创建了这个对象:

var gameState = {
  state: loaded,
  lastPlayer: null,
  lastScore: null
};

这并不意味着“我不知道最后一名球员是谁”,而是意味着“没有最后一名球员”。


为了澄清以前的答案,为什么==工作的原因是因为,不像=== ,它会进行类型转换

链接地址: http://www.djcxy.com/p/76655.html

上一篇: difference between null and undefined in JavaScript?

下一篇: Can I set variables to undefined or pass undefined as an argument?