我的JavaScript学习之路三:JavaScript数据类型之null、undefined
一、Undefined 类型
Undefined 类型只有一个值,就是特殊值 undefined。当使用 var 或 let 声明了变量但没有初始化时,就相当于给变量赋予了 undefined 值
var message; //变量声明但未初始化
console.log(message); //undefined
一般来说,永远不用显式地给某个变量设置 undefined 值。字面值 undefined主要用于比较。
而且undefined在 ECMA-262 第 3 版之前是不存在的。增加这个特殊值的目的就是为了正式明确空对象指针(null)和未初始化变量的区别。
Undefined 类型用法
- 变量被声明了,但没有赋值时,就等于undefined。
var name; //变量声明了,但是没有赋值,会返回undefined
console.log(name); //undefined
console.log( name == undefined); //true;
- 调用函数时,应该提供的参数没有提供,该参数等于undefined。
function test(a,b) {
console.log(a); //1
console.log(b); //undefined 因为变量b没有传参,所以为undefined
}
test(1);
//1
//undefined
- 访问对象没有赋值的属性,该属性的值为undefined。
let obj = {
name : 'tom',
age : 18
}
obj.name //'tom'
obj.age //18
obj.sex //undefined
- 函数没有返回值时,默认返回undefined
var x = f();
console.log(x); //undefined
二、Null类型
Null 类型同样只有一个值,即特殊值 null。逻辑上讲,null 值表示一个空对象指针,这也是给typeof 传一个 null 会返回"object"的原因
Null 类型用法
- 初始化一个空对象,或者回收一个对象
var obj = null;
- 检查空对象是否赋值一个对象
if(obj != null){} // 证明obj是一个对象
- 表示原型链的终点
Object.prototype.__proto__ === null; //true
- 当函数的返回期望值是对象时, 用作返回值传出
function getPerson() {
if(condition){
return new Person("tom");
}else{
return null;
}
}
三、Undefined 类型与Null类型区别
1.两者相似性
在JavaScript语言中undefined和null都表示"无"的值
值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的,通过下列代码可以验证这一结论:
undefined == null; //true
2.两者不同性
-
null是一个表示"无"的对象,转为数值时为0
null表示的是一个“空对象指针”,JS中栈内存中保存的是基本类型值和引用类型值得引用地址,其中引用类型得引用地址就像我们生活中得家门钥匙,栈内存就像我们的裤兜,从裤兜中取了钥匙就可以进入房间。null就像是在裤子兜里放了一把打不开任何门的钥匙
-
undefined是一个表示"无"的原始值,转为数值时为NaN
undefined表示一个变量声明了,但没有初始化,在栈内存中申请了一块空间,但是里面什么值都没放,JS就默认给放一个undefined。