关于JS的 undefined null 还有 === 和 ==

//代码如下:
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

clipboard.png

主要疑问是:

  • 5和6的结果为什么不同?
  • 为什么1和3都是true但2和4一个false一个true?
阅读 6.5k
7 个回答

用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

先看下nullundefined的类型:

typeof null//object
typeof undefined//undefined

首先var了一个变量x,这个变量就是undefined
然后就是拿undefinednull比较啦~

===这是完全等于,需要类型一致并且值一致
==只需要值一致就OK了,会有隐式类型转换的过程


  1. 5和6结果为什么不同?
    因为nullundefined的类型不同,所以===不通过

  2. 1和3都是true,但2和4一个false一个true
    因为xundefined,然后再参考问题1

ECMAScript 定义了 Undefined、Null、Boolean、String、Number、Object 6种类型,其中 Undefined 和 Null 都是只包含一个值得特殊类型,分别为undefinednull,因此根据定义undefinednull分属不同类型,使用===运算符返回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

通常判断一个变量存在与否aaa == null,这里用的是==,其实这个表达式就体现了JS的undefinednull,还有=====他们之间的关系。

哈哈 推荐你看一下javascript高级编程 这本书,看完之后 这些通通不是问题!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏