版权声明:所有博客本人原创,转载注明出处即可 https://blog.csdn.net/qq_42813491/article/details/87932955
区分js中的undefined和null
说明
- 暂不涉及ECMA 2016
js数据类型
- 基本数据类型:String、Number,Boolean、Null、 Undefined
- 特点:存放在栈中,数据大小确定,内存空间大小可分配,按值存放,可直接按值访问
- 引用数据类型:Object
- 特点:存放在堆内存中,每个对象所分配的空间大小不一,具体情况具体配置
特殊的Undefined和Null
- 不同于其他基本数据类型,这两个分类只包含一种情况, 就是他们本身,即undefined,null
“和而不同” 的undefined和null
- 这两个小东西很相似,但也有区别,下面具体说明
出现undefined的情景
- 声明变量未赋值
var name;
console.log(name);//undefined
- 访问对象上不存在的属性
var obj={};
console.log(obj.age); // undefined
- 函数定义了形参,但调用时未传实参
// 这种写法是函数的自调用,和fa ()效果一样
(function fa(a){
console.log(a);
}())
- 总结:undefined出现多是数据原始状态的保留结果,造化钟神秀的感觉,天然雕饰
- 字面来看,null就是空,为什么空呢?
- 肯定是人为的将它变成没有对象的野指针
- 也就是说,此时此刻,栈内存中的变量不在指向堆内存中的任何对象,流离失所
null出现场景
- 意志形态,是将要发生的事
- 简单来说,你定义了一个变量,打算保存接下来用到的某个对象,初始化时候建议赋值null
- 类似情况就是一个对象在两个函数内部都要使用,但函数自身就是一个作用域,对外界封闭
- 此时就需要将该对象提成全局变量,初始化赋值为null
console.log(typeof null)
- 打印object而不是null
- null是没有对象的野指针,指向的自然是空对象,空对象也是对象,所以类型检测结果是object