未定义 undefined
-
定义
这种数据类型只有一个值,就是undefined
表示"缺少值",就是此处应该有一个值,但是还没有定义
-
常见位置(常见用法)
- 变量被声明了,但没有赋值时,就等于undefined
var a;
a //undefined
- 调用函数时,应该提供的参数没有提供,该参数的值为undefined
function fn(a){
console.log(a); //undefined
};
fn();
- 对象没有赋值的属性,该属性的值为undefined
var a=1;
console.log(a.style); //undefined
- 函数没有返回值时,默认返回undefined
var a = function fn(){
alert(1); //1
};
console.log(fn()); //undefined
空 null
-
定义
这种数据类型只有一个值,就是null
null表示"没有对象",即该处不应该有值
-
常见位置(常见用法)
- 获取页面中不存在的东西,返回值为null
var btn = document.getElementById('btn'); //页面中没有btn这个id
a //null
- 调用函数时,不需要传入某个参数,这时就可以传入null
- 作为对象原型链的终点
注意:JavaScript的标识名区分大小写,undefined和null不同于Undefined和Null(或者其他仅仅大小写不同的词形),后者只是普通的变量名
两者对比
-
关于变量
var a;
a //undefined
a == null //true 存在数据类型转换,a被转换成了undefined,而undefined == null,故这里为true
a == undefined //true
a === null //false
a === undefined //true
typeof a //'undefined'
-
大小判断
if(!null){ //存在隐式类型转换,将null转换为false
alert(1); //故这里弹出1
}
if(!undefined){ //存在隐式类型转换,将undefined转换为false
alert(1); //故这里弹出1
}
//undefined和null在if语句中,都会被自动转为false
//故下面的undefined == null的结果为true
undefined == null //true 存在隐式类型转换,undefined和null都被转换为false
undefined === null //false
-
typeof返回值
typeof undefined //'undefined'
typeof null //'object'
//并不是说null的数据类型就是对象,而是JavaScript早期部署中的一个约定俗成,其实不完全正确,后来再想改已经太晚了,会破坏现存代码,所以一直保留至今
-
Number()返回值
Number(undefined) //NaN
Number(null) //0