区分js中的undefined和null

版权声明:所有博客本人原创,转载注明出处即可 https://blog.csdn.net/qq_42813491/article/details/87932955

说明

  • 暂不涉及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

猜你喜欢

转载自blog.csdn.net/qq_42813491/article/details/87932955