首先,从本质来看,他们是两种不一样的JavaScript数据类型。直接上《JavaScript高级程序设计》里的解释好了。
Undefined类型:Undefined类型只有一个值,即特殊的undefined。在使用var 声明变量但未对其加以初始化时,这个变量的值就是undefined。
Null类型:Null类型也只有一个特殊的值——null。从逻辑角度来看,null值表示一个空对象指针。函数
alert
a:声明但未定义(undefined)
b:声明且定义为null
c:未声明测试
typeof
a:声明但未定义(undefined)
b:声明且定义为null(表示定义的变量未来用于保存对象)
c:未声明(对于还没有声明过的变量,只能执行一项操做,就是用typeof检测其数据类型)spa
instanceof
a:定义为undefined
b:定义为null设计
用 !逻辑非运算符,undefined和null会自动转换成布尔值false,可是直接用==则会失效。指针
== 运算符比较:在对比不一样类型时先作数据类型转换,转换后比较两个变量的值
===运算符比较:比较两个数据的数据类型以及值对象
typeof:是运算符,不是函数,用于检测变量的数据类型。返回的是一个字符串。
使用方法eg. Typeof(“string”) 其中括号可加可不加
typeof返回的值有:undefined, string, boolean, number, object, functionip
分析一下上图的两个结果:
typeof 1: 1就是一个数字类型的常量,故结果为”number”;
new Number(1) 建立一个Number类型的对象,值为1,故结果为”object”字符串
instanceof用于判断一个变量是不是某个对象(类)的实例。返回的是布尔类型。
在控制台作了以下两行代码的测试,最早试的实际上是第二行代码,输出false的时候我还有有些惊讶的,a不是赋值1了嘛,怎么是false呢?因而我又仔细读了一下instanceof的定义,对象,类,1根本就是一个常量嘛,跟对象的实例根本不挨边。(结合Java的OOP相关知识,理解不少)
instanceof返回的值有:true falsestring