JavaScript和null之间的区别?
根据JavaScript中null
和undefined
的区别是什么?, null
和undefined
是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 ==
只匹配值,我认为undefined
和null
必须具有相同的值。 所以我尝试了:
alert(null)
- >给出null
alert(undefined)
- >给出undefined
我不明白这怎么可能。
这是演示。
编辑
我知道===
会给出预期的结果,因为undefined
和null
有不同的类型,但是在==
的情况下,类型转换如何在Javascript中工作? 我们可以像在Java中那样进行显式类型转换吗? 我想对undefined
和null
应用手动类型转换。
您需要使用身份运算符===
,而不是等号运算符==
。 通过这一更改,您的代码将按预期工作:
alert(a===null); // true
alert(a===undefined); // false
alert(b===null); // false
alert(b===undefined); // true
在这种情况下等号运算符失败的原因是因为它试图进行类型转换。 undefined
的类型是undefined
,而null
是object
的类型; 在试图比较这两者时,Javascript将两者都转换为false
,这就是为什么它最终认为它们是平等的。 另一方面,身份运算符不会进行类型转换,并且要求类型相等才能结束相等。
编辑感谢@ user1600680指出,上述不完全正确; ECMAScript规范将null-to-undefined定义为特殊情况,并且相等。 没有中间转换为false
。
类型转换的一个简单例子是数字到字符串:
console.log(5 == "5"); // true
console.log(5 === "5"); // false
上面的答案引用了Douglas Crockford的Javascript:The Good Parts:
[当操作数是相同类型时,“==”操作符]是正确的,但是如果它们是不同类型的,它们试图强制这些值。 他们所做的规则很复杂且难以理解。
如果你不相信这些规则是复杂而不可取的,那么快速浏览一下这些规则将会使你忽略这个概念。
undefined
和null
具有非常不同的语义含义。
undefined
通常意味着“没有任何答复”, null
表示“有答复,答复是什么。”
例如,如果我创建了这个对象:
var gameState = {
state: loaded,
lastPlayer: null,
lastScore: null
};
这并不意味着“我不知道最后一名球员是谁”,而是意味着“没有最后一名球员”。
为了澄清以前的答案,为什么==
工作的原因是因为,不像===
,它会进行类型转换
上一篇: difference between null and undefined in JavaScript?
下一篇: Can I set variables to undefined or pass undefined as an argument?