//代码如下:
var x;
console.log(x === undefined); // 1
console.log(x === null); // 2
console.log(x == undefined); // 3
console.log(x == null); // 4
console.log(null === undefined);// 5
console.log(null == undefined); // 6
主要疑问是:
- 5和6的结果为什么不同?
- 为什么1和3都是
true
但2和4一个false
一个true
?
通常判断一个变量存在与否aaa == null
,这里用的是==
,其实这个表达式就体现了JS的undefined
和null
,还有===
和==
他们之间的关系。
先看下null
和undefined
的类型:
typeof null//object
typeof undefined//undefined
首先var
了一个变量x
,这个变量就是undefined
然后就是拿undefined
和null
比较啦~
===
这是完全等于,需要类型一致并且值一致==
只需要值一致就OK了,会有隐式类型转换的过程
5和6结果为什么不同?
因为null
和undefined
的类型不同,所以===
不通过1和3都是
true
,但2和4一个false
一个true
?
因为x
是undefined
,然后再参考问题1
用typeof去测
===比较类型和值
==比较值
1、5和6的结果为什么不同?
null是一个对象,undefined的连对象都不是
2、为什么1和3都是true但2和4一个false一个true?
var x;没有赋值,就是undefined,alert(x);可看出结果
2是false的原因是比较类型造成的false,因为null是对象,undefined不是
4是true的原因是比较值造成,x的值没有,所有二者比较结果一致
1)null/undefined是2个不同的类型
2)当用===(全等)时,2者是因为是不同的类型,所以就不同的
3)当用==(不全等)时,忽略类型的比较,null、undefined按转化的规则,null与undefined相等
==只是值相等就成立,===需要值相等和类型相等才成立。
var x;你申明了x,没有赋值,所以结果就像你输出的这样。
=== 运算符判断某个值是否是未定义的
== 运算符认为 undefined 值等价于 null
ECMAScript 定义了 Undefined、Null、Boolean、String、Number、Object 6种类型,其中 Undefined 和 Null 都是只包含一个值得特殊类型,分别为undefined
和null
,因此根据定义undefined
和null
分属不同类型,使用===
运算符返回false
,而值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的,所以使用==
运算符返回false
。
进一步讲,当声明的变量未初始化时,该变量的默认值是undefined
,而null
则用于表示尚未存在的对象。这其中重要的却别在于任何未初始化的变量自动被赋值undefined
,而任何null
值必须显式赋值,因此有前四条语句的结果。
参考资料:
1. http://www.w3.org/html/ig/zh/wiki/ES5/%E7%B1%BB%E5%9E%8B
2. http://www.w3school.com.cn/js/pro_js_primitivetypes.asp
哈哈 推荐你看一下javascript高级编程 这本书,看完之后 这些通通不是问题!